{"id":"fa6af1cde4d1f86018ff50f273815799","_format":"hh-sol-build-info-1","solcVersion":"0.8.28","solcLongVersion":"0.8.28+commit.7893614a","input":{"language":"Solidity","sources":{"@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    constructor(address initialOwner) {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC20InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC20InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC20InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n    /**\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n     * Used in balance queries.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721InvalidOwner(address owner);\n\n    /**\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721NonexistentToken(uint256 tokenId);\n\n    /**\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param tokenId Identifier number of a token.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC721InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC721InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC721InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC1155InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC1155InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC1155MissingApprovalForAll(address operator, address owner);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC1155InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC1155InvalidOperator(address operator);\n\n    /**\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n     * Used in batch transfers.\n     * @param idsLength Length of the array of token identifiers\n     * @param valuesLength Length of the array of token amounts\n     */\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.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 *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC-20\n * applications.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n    mapping(address account => uint256) private _balances;\n\n    mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * Both values are immutable: they can only be set once during construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual 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 default value returned by this function, unless\n     * it's overridden.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `value`.\n     */\n    function transfer(address to, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Skips emitting an {Approval} event indicating an allowance update. This is not\n     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `value`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `value`.\n     */\n    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, value);\n        _transfer(from, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _transfer(address from, address to, uint256 value) internal {\n        if (from == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        if (to == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(from, to, value);\n    }\n\n    /**\n     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n     * this function.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _update(address from, address to, uint256 value) internal virtual {\n        if (from == address(0)) {\n            // Overflow check required: The rest of the code assumes that totalSupply never overflows\n            _totalSupply += value;\n        } else {\n            uint256 fromBalance = _balances[from];\n            if (fromBalance < value) {\n                revert ERC20InsufficientBalance(from, fromBalance, value);\n            }\n            unchecked {\n                // Overflow not possible: value <= fromBalance <= totalSupply.\n                _balances[from] = fromBalance - value;\n            }\n        }\n\n        if (to == address(0)) {\n            unchecked {\n                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n                _totalSupply -= value;\n            }\n        } else {\n            unchecked {\n                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n                _balances[to] += value;\n            }\n        }\n\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n     * Relies on the `_update` mechanism\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _mint(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(address(0), account, value);\n    }\n\n    /**\n     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n     * Relies on the `_update` mechanism.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead\n     */\n    function _burn(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        _update(account, address(0), value);\n    }\n\n    /**\n     * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     *\n     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n     */\n    function _approve(address owner, address spender, uint256 value) internal {\n        _approve(owner, spender, value, true);\n    }\n\n    /**\n     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n     *\n     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n     * `Approval` event during `transferFrom` operations.\n     *\n     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n     * true using the following override:\n     *\n     * ```solidity\n     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n     *     super._approve(owner, spender, value, true);\n     * }\n     * ```\n     *\n     * Requirements are the same as {_approve}.\n     */\n    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n        if (owner == address(0)) {\n            revert ERC20InvalidApprover(address(0));\n        }\n        if (spender == address(0)) {\n            revert ERC20InvalidSpender(address(0));\n        }\n        _allowances[owner][spender] = value;\n        if (emitEvent) {\n            emit Approval(owner, spender, value);\n        }\n    }\n\n    /**\n     * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n     *\n     * Does not update the allowance value in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Does not emit an {Approval} event.\n     */\n    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance < type(uint256).max) {\n            if (currentAllowance < value) {\n                revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n            }\n            unchecked {\n                _approve(owner, spender, currentAllowance - value, false);\n            }\n        }\n    }\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) 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 a `value` amount of tokens as the allowance of `spender` over the\n     * 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 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` 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 from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"},"contracts/MockERC20.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @title MockERC20\n * @dev Test ERC20 token for VideoPayment testing\n */\ncontract MockERC20 is ERC20, Ownable {\n    uint8 private _decimals;\n\n    constructor(\n        string memory name,\n        string memory symbol,\n        uint8 decimals_,\n        address initialOwner\n    ) ERC20(name, symbol) Ownable(initialOwner) {\n        _decimals = decimals_;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     */\n    function decimals() public view virtual override returns (uint8) {\n        return _decimals;\n    }\n\n    /**\n     * @dev Mint tokens to specified address\n     * @param to Address to mint tokens to\n     * @param amount Amount of tokens to mint\n     */\n    function mint(address to, uint256 amount) external onlyOwner {\n        _mint(to, amount);\n    }\n\n    /**\n     * @dev Burn tokens from specified address\n     * @param from Address to burn tokens from\n     * @param amount Amount of tokens to burn\n     */\n    function burn(address from, uint256 amount) external onlyOwner {\n        _burn(from, amount);\n    }\n\n    /**\n     * @dev Batch mint tokens to multiple addresses\n     * @param recipients Array of addresses to mint tokens to\n     * @param amounts Array of amounts to mint\n     */\n    function batchMint(\n        address[] memory recipients,\n        uint256[] memory amounts\n    ) external onlyOwner {\n        require(recipients.length == amounts.length, \"Arrays length mismatch\");\n\n        for (uint256 i = 0; i < recipients.length; i++) {\n            _mint(recipients[i], amounts[i]);\n        }\n    }\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":200},"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","storageLayout","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"sources":{"@openzeppelin/contracts/access/Ownable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","exportedSymbols":{"Context":[933],"Ownable":[147]},"id":148,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"102:24:0"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":148,"sourceUnit":934,"src":"128:45:0","symbolAliases":[{"foreign":{"id":2,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":933,"src":"136:7:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":5,"name":"Context","nameLocations":["692:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":933,"src":"692:7:0"},"id":6,"nodeType":"InheritanceSpecifier","src":"692:7:0"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":4,"nodeType":"StructuredDocumentation","src":"175:487:0","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 The initial owner is set to the address provided by the deployer. This can\n 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":147,"linearizedBaseContracts":[147,933],"name":"Ownable","nameLocation":"681:7:0","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":8,"mutability":"mutable","name":"_owner","nameLocation":"722:6:0","nodeType":"VariableDeclaration","scope":147,"src":"706:22:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7,"name":"address","nodeType":"ElementaryTypeName","src":"706:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"documentation":{"id":9,"nodeType":"StructuredDocumentation","src":"735:85:0","text":" @dev The caller account is not authorized to perform an operation."},"errorSelector":"118cdaa7","id":13,"name":"OwnableUnauthorizedAccount","nameLocation":"831:26:0","nodeType":"ErrorDefinition","parameters":{"id":12,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11,"mutability":"mutable","name":"account","nameLocation":"866:7:0","nodeType":"VariableDeclaration","scope":13,"src":"858:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10,"name":"address","nodeType":"ElementaryTypeName","src":"858:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"857:17:0"},"src":"825:50:0"},{"documentation":{"id":14,"nodeType":"StructuredDocumentation","src":"881:82:0","text":" @dev The owner is not a valid owner account. (eg. `address(0)`)"},"errorSelector":"1e4fbdf7","id":18,"name":"OwnableInvalidOwner","nameLocation":"974:19:0","nodeType":"ErrorDefinition","parameters":{"id":17,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16,"mutability":"mutable","name":"owner","nameLocation":"1002:5:0","nodeType":"VariableDeclaration","scope":18,"src":"994:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15,"name":"address","nodeType":"ElementaryTypeName","src":"994:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"993:15:0"},"src":"968:41:0"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":24,"name":"OwnershipTransferred","nameLocation":"1021:20:0","nodeType":"EventDefinition","parameters":{"id":23,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1058:13:0","nodeType":"VariableDeclaration","scope":24,"src":"1042:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19,"name":"address","nodeType":"ElementaryTypeName","src":"1042:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1089:8:0","nodeType":"VariableDeclaration","scope":24,"src":"1073:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21,"name":"address","nodeType":"ElementaryTypeName","src":"1073:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1041:57:0"},"src":"1015:84:0"},{"body":{"id":49,"nodeType":"Block","src":"1259:153:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":35,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27,"src":"1273:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":33,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1297:1:0","typeDescriptions":{"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":32,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1289:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31,"name":"address","nodeType":"ElementaryTypeName","src":"1289:7:0","typeDescriptions":{}}},"id":34,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1289:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1273:26:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44,"nodeType":"IfStatement","src":"1269:95:0","trueBody":{"id":43,"nodeType":"Block","src":"1301:63:0","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":39,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1350:1:0","typeDescriptions":{"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":38,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1342:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37,"name":"address","nodeType":"ElementaryTypeName","src":"1342:7:0","typeDescriptions":{}}},"id":40,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1342:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":36,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18,"src":"1322:19:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":41,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1322:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":42,"nodeType":"RevertStatement","src":"1315:38:0"}]}},{"expression":{"arguments":[{"id":46,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27,"src":"1392:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":45,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":146,"src":"1373:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":47,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1373:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48,"nodeType":"ExpressionStatement","src":"1373:32:0"}]},"documentation":{"id":25,"nodeType":"StructuredDocumentation","src":"1105:115:0","text":" @dev Initializes the contract setting the address provided by the deployer as the initial owner."},"id":50,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":28,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27,"mutability":"mutable","name":"initialOwner","nameLocation":"1245:12:0","nodeType":"VariableDeclaration","scope":50,"src":"1237:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26,"name":"address","nodeType":"ElementaryTypeName","src":"1237:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1236:22:0"},"returnParameters":{"id":29,"nodeType":"ParameterList","parameters":[],"src":"1259:0:0"},"scope":147,"src":"1225:187:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":57,"nodeType":"Block","src":"1521:41:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":53,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84,"src":"1531:11:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":54,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1531:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55,"nodeType":"ExpressionStatement","src":"1531:13:0"},{"id":56,"nodeType":"PlaceholderStatement","src":"1554:1:0"}]},"documentation":{"id":51,"nodeType":"StructuredDocumentation","src":"1418:77:0","text":" @dev Throws if called by any account other than the owner."},"id":58,"name":"onlyOwner","nameLocation":"1509:9:0","nodeType":"ModifierDefinition","parameters":{"id":52,"nodeType":"ParameterList","parameters":[],"src":"1518:2:0"},"src":"1500:62:0","virtual":false,"visibility":"internal"},{"body":{"id":66,"nodeType":"Block","src":"1693:30:0","statements":[{"expression":{"id":64,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8,"src":"1710:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":63,"id":65,"nodeType":"Return","src":"1703:13:0"}]},"documentation":{"id":59,"nodeType":"StructuredDocumentation","src":"1568:65:0","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":67,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1647:5:0","nodeType":"FunctionDefinition","parameters":{"id":60,"nodeType":"ParameterList","parameters":[],"src":"1652:2:0"},"returnParameters":{"id":63,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":67,"src":"1684:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61,"name":"address","nodeType":"ElementaryTypeName","src":"1684:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1683:9:0"},"scope":147,"src":"1638:85:0","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":83,"nodeType":"Block","src":"1841:117:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":71,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67,"src":"1855:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":72,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1855:7:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":73,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":915,"src":"1866:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1866:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1855:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":82,"nodeType":"IfStatement","src":"1851:101:0","trueBody":{"id":81,"nodeType":"Block","src":"1880:72:0","statements":[{"errorCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":915,"src":"1928:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":78,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1928:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"1901:26:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":79,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":80,"nodeType":"RevertStatement","src":"1894:47:0"}]}}]},"documentation":{"id":68,"nodeType":"StructuredDocumentation","src":"1729:62:0","text":" @dev Throws if the sender is not the owner."},"id":84,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1805:11:0","nodeType":"FunctionDefinition","parameters":{"id":69,"nodeType":"ParameterList","parameters":[],"src":"1816:2:0"},"returnParameters":{"id":70,"nodeType":"ParameterList","parameters":[],"src":"1841:0:0"},"scope":147,"src":"1796:162:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":97,"nodeType":"Block","src":"2347:47:0","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":93,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2384:1:0","typeDescriptions":{"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":92,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2376:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":91,"name":"address","nodeType":"ElementaryTypeName","src":"2376:7:0","typeDescriptions":{}}},"id":94,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2376:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":146,"src":"2357:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":95,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2357:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":96,"nodeType":"ExpressionStatement","src":"2357:30:0"}]},"documentation":{"id":85,"nodeType":"StructuredDocumentation","src":"1964:324:0","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."},"functionSelector":"715018a6","id":98,"implemented":true,"kind":"function","modifiers":[{"id":88,"kind":"modifierInvocation","modifierName":{"id":87,"name":"onlyOwner","nameLocations":["2337:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"2337:9:0"},"nodeType":"ModifierInvocation","src":"2337:9:0"}],"name":"renounceOwnership","nameLocation":"2302:17:0","nodeType":"FunctionDefinition","parameters":{"id":86,"nodeType":"ParameterList","parameters":[],"src":"2319:2:0"},"returnParameters":{"id":89,"nodeType":"ParameterList","parameters":[],"src":"2347:0:0"},"scope":147,"src":"2293:101:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":125,"nodeType":"Block","src":"2613:145:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":106,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":101,"src":"2627:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2647:1:0","typeDescriptions":{"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":108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2639:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":107,"name":"address","nodeType":"ElementaryTypeName","src":"2639:7:0","typeDescriptions":{}}},"id":110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2639:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2627:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":120,"nodeType":"IfStatement","src":"2623:91:0","trueBody":{"id":119,"nodeType":"Block","src":"2651:63:0","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2700:1:0","typeDescriptions":{"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":114,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2692:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":113,"name":"address","nodeType":"ElementaryTypeName","src":"2692:7:0","typeDescriptions":{}}},"id":116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2692:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":112,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18,"src":"2672:19:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2672:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":118,"nodeType":"RevertStatement","src":"2665:38:0"}]}},{"expression":{"arguments":[{"id":122,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":101,"src":"2742:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":121,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":146,"src":"2723:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2723:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":124,"nodeType":"ExpressionStatement","src":"2723:28:0"}]},"documentation":{"id":99,"nodeType":"StructuredDocumentation","src":"2400:138:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":126,"implemented":true,"kind":"function","modifiers":[{"id":104,"kind":"modifierInvocation","modifierName":{"id":103,"name":"onlyOwner","nameLocations":["2603:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"2603:9:0"},"nodeType":"ModifierInvocation","src":"2603:9:0"}],"name":"transferOwnership","nameLocation":"2552:17:0","nodeType":"FunctionDefinition","parameters":{"id":102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":101,"mutability":"mutable","name":"newOwner","nameLocation":"2578:8:0","nodeType":"VariableDeclaration","scope":126,"src":"2570:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":100,"name":"address","nodeType":"ElementaryTypeName","src":"2570:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2569:18:0"},"returnParameters":{"id":105,"nodeType":"ParameterList","parameters":[],"src":"2613:0:0"},"scope":147,"src":"2543:215:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":145,"nodeType":"Block","src":"2975:124:0","statements":[{"assignments":[133],"declarations":[{"constant":false,"id":133,"mutability":"mutable","name":"oldOwner","nameLocation":"2993:8:0","nodeType":"VariableDeclaration","scope":145,"src":"2985:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":132,"name":"address","nodeType":"ElementaryTypeName","src":"2985:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":135,"initialValue":{"id":134,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8,"src":"3004:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2985:25:0"},{"expression":{"id":138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":136,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8,"src":"3020:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":137,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"3029:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3020:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":139,"nodeType":"ExpressionStatement","src":"3020:17:0"},{"eventCall":{"arguments":[{"id":141,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"3073:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":142,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"3083:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":140,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"3052:20:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":144,"nodeType":"EmitStatement","src":"3047:45:0"}]},"documentation":{"id":127,"nodeType":"StructuredDocumentation","src":"2764:143:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":146,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2921:18:0","nodeType":"FunctionDefinition","parameters":{"id":130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":129,"mutability":"mutable","name":"newOwner","nameLocation":"2948:8:0","nodeType":"VariableDeclaration","scope":146,"src":"2940:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":128,"name":"address","nodeType":"ElementaryTypeName","src":"2940:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2939:18:0"},"returnParameters":{"id":131,"nodeType":"ParameterList","parameters":[],"src":"2975:0:0"},"scope":147,"src":"2912:187:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":148,"src":"663:2438:0","usedErrors":[13,18],"usedEvents":[24]}],"src":"102:3000:0"},"id":0},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","exportedSymbols":{"IERC1155Errors":[284],"IERC20Errors":[189],"IERC721Errors":[237]},"id":285,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":149,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"112:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":150,"nodeType":"StructuredDocumentation","src":"138:141:1","text":" @dev Standard ERC-20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens."},"fullyImplemented":true,"id":189,"linearizedBaseContracts":[189],"name":"IERC20Errors","nameLocation":"290:12:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":151,"nodeType":"StructuredDocumentation","src":"309:309:1","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"e450d38c","id":159,"name":"ERC20InsufficientBalance","nameLocation":"629:24:1","nodeType":"ErrorDefinition","parameters":{"id":158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":153,"mutability":"mutable","name":"sender","nameLocation":"662:6:1","nodeType":"VariableDeclaration","scope":159,"src":"654:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":152,"name":"address","nodeType":"ElementaryTypeName","src":"654:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":155,"mutability":"mutable","name":"balance","nameLocation":"678:7:1","nodeType":"VariableDeclaration","scope":159,"src":"670:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":154,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":157,"mutability":"mutable","name":"needed","nameLocation":"695:6:1","nodeType":"VariableDeclaration","scope":159,"src":"687:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":156,"name":"uint256","nodeType":"ElementaryTypeName","src":"687:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"653:49:1"},"src":"623:80:1"},{"documentation":{"id":160,"nodeType":"StructuredDocumentation","src":"709:152:1","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"96c6fd1e","id":164,"name":"ERC20InvalidSender","nameLocation":"872:18:1","nodeType":"ErrorDefinition","parameters":{"id":163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":162,"mutability":"mutable","name":"sender","nameLocation":"899:6:1","nodeType":"VariableDeclaration","scope":164,"src":"891:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":161,"name":"address","nodeType":"ElementaryTypeName","src":"891:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"890:16:1"},"src":"866:41:1"},{"documentation":{"id":165,"nodeType":"StructuredDocumentation","src":"913:159:1","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"ec442f05","id":169,"name":"ERC20InvalidReceiver","nameLocation":"1083:20:1","nodeType":"ErrorDefinition","parameters":{"id":168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":167,"mutability":"mutable","name":"receiver","nameLocation":"1112:8:1","nodeType":"VariableDeclaration","scope":169,"src":"1104:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":166,"name":"address","nodeType":"ElementaryTypeName","src":"1104:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1103:18:1"},"src":"1077:45:1"},{"documentation":{"id":170,"nodeType":"StructuredDocumentation","src":"1128:345:1","text":" @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"fb8f41b2","id":178,"name":"ERC20InsufficientAllowance","nameLocation":"1484:26:1","nodeType":"ErrorDefinition","parameters":{"id":177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":172,"mutability":"mutable","name":"spender","nameLocation":"1519:7:1","nodeType":"VariableDeclaration","scope":178,"src":"1511:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":171,"name":"address","nodeType":"ElementaryTypeName","src":"1511:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":174,"mutability":"mutable","name":"allowance","nameLocation":"1536:9:1","nodeType":"VariableDeclaration","scope":178,"src":"1528:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":173,"name":"uint256","nodeType":"ElementaryTypeName","src":"1528:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":176,"mutability":"mutable","name":"needed","nameLocation":"1555:6:1","nodeType":"VariableDeclaration","scope":178,"src":"1547:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":175,"name":"uint256","nodeType":"ElementaryTypeName","src":"1547:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1510:52:1"},"src":"1478:85:1"},{"documentation":{"id":179,"nodeType":"StructuredDocumentation","src":"1569:174:1","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"e602df05","id":183,"name":"ERC20InvalidApprover","nameLocation":"1754:20:1","nodeType":"ErrorDefinition","parameters":{"id":182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":181,"mutability":"mutable","name":"approver","nameLocation":"1783:8:1","nodeType":"VariableDeclaration","scope":183,"src":"1775:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":180,"name":"address","nodeType":"ElementaryTypeName","src":"1775:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1774:18:1"},"src":"1748:45:1"},{"documentation":{"id":184,"nodeType":"StructuredDocumentation","src":"1799:195:1","text":" @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"94280d62","id":188,"name":"ERC20InvalidSpender","nameLocation":"2005:19:1","nodeType":"ErrorDefinition","parameters":{"id":187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":186,"mutability":"mutable","name":"spender","nameLocation":"2033:7:1","nodeType":"VariableDeclaration","scope":188,"src":"2025:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":185,"name":"address","nodeType":"ElementaryTypeName","src":"2025:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2024:17:1"},"src":"1999:43:1"}],"scope":285,"src":"280:1764:1","usedErrors":[159,164,169,178,183,188],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC721Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":190,"nodeType":"StructuredDocumentation","src":"2046:143:1","text":" @dev Standard ERC-721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens."},"fullyImplemented":true,"id":237,"linearizedBaseContracts":[237],"name":"IERC721Errors","nameLocation":"2200:13:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":191,"nodeType":"StructuredDocumentation","src":"2220:219:1","text":" @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n Used in balance queries.\n @param owner Address of the current owner of a token."},"errorSelector":"89c62b64","id":195,"name":"ERC721InvalidOwner","nameLocation":"2450:18:1","nodeType":"ErrorDefinition","parameters":{"id":194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":193,"mutability":"mutable","name":"owner","nameLocation":"2477:5:1","nodeType":"VariableDeclaration","scope":195,"src":"2469:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":192,"name":"address","nodeType":"ElementaryTypeName","src":"2469:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2468:15:1"},"src":"2444:40:1"},{"documentation":{"id":196,"nodeType":"StructuredDocumentation","src":"2490:132:1","text":" @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token."},"errorSelector":"7e273289","id":200,"name":"ERC721NonexistentToken","nameLocation":"2633:22:1","nodeType":"ErrorDefinition","parameters":{"id":199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":198,"mutability":"mutable","name":"tokenId","nameLocation":"2664:7:1","nodeType":"VariableDeclaration","scope":200,"src":"2656:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":197,"name":"uint256","nodeType":"ElementaryTypeName","src":"2656:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2655:17:1"},"src":"2627:46:1"},{"documentation":{"id":201,"nodeType":"StructuredDocumentation","src":"2679:289:1","text":" @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token."},"errorSelector":"64283d7b","id":209,"name":"ERC721IncorrectOwner","nameLocation":"2979:20:1","nodeType":"ErrorDefinition","parameters":{"id":208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":203,"mutability":"mutable","name":"sender","nameLocation":"3008:6:1","nodeType":"VariableDeclaration","scope":209,"src":"3000:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":202,"name":"address","nodeType":"ElementaryTypeName","src":"3000:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":205,"mutability":"mutable","name":"tokenId","nameLocation":"3024:7:1","nodeType":"VariableDeclaration","scope":209,"src":"3016:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":204,"name":"uint256","nodeType":"ElementaryTypeName","src":"3016:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":207,"mutability":"mutable","name":"owner","nameLocation":"3041:5:1","nodeType":"VariableDeclaration","scope":209,"src":"3033:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":206,"name":"address","nodeType":"ElementaryTypeName","src":"3033:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2999:48:1"},"src":"2973:75:1"},{"documentation":{"id":210,"nodeType":"StructuredDocumentation","src":"3054:152:1","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"73c6ac6e","id":214,"name":"ERC721InvalidSender","nameLocation":"3217:19:1","nodeType":"ErrorDefinition","parameters":{"id":213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":212,"mutability":"mutable","name":"sender","nameLocation":"3245:6:1","nodeType":"VariableDeclaration","scope":214,"src":"3237:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":211,"name":"address","nodeType":"ElementaryTypeName","src":"3237:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3236:16:1"},"src":"3211:42:1"},{"documentation":{"id":215,"nodeType":"StructuredDocumentation","src":"3259:159:1","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"64a0ae92","id":219,"name":"ERC721InvalidReceiver","nameLocation":"3429:21:1","nodeType":"ErrorDefinition","parameters":{"id":218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":217,"mutability":"mutable","name":"receiver","nameLocation":"3459:8:1","nodeType":"VariableDeclaration","scope":219,"src":"3451:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":216,"name":"address","nodeType":"ElementaryTypeName","src":"3451:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3450:18:1"},"src":"3423:46:1"},{"documentation":{"id":220,"nodeType":"StructuredDocumentation","src":"3475:247:1","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token."},"errorSelector":"177e802f","id":226,"name":"ERC721InsufficientApproval","nameLocation":"3733:26:1","nodeType":"ErrorDefinition","parameters":{"id":225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":222,"mutability":"mutable","name":"operator","nameLocation":"3768:8:1","nodeType":"VariableDeclaration","scope":226,"src":"3760:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":221,"name":"address","nodeType":"ElementaryTypeName","src":"3760:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":224,"mutability":"mutable","name":"tokenId","nameLocation":"3786:7:1","nodeType":"VariableDeclaration","scope":226,"src":"3778:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":223,"name":"uint256","nodeType":"ElementaryTypeName","src":"3778:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3759:35:1"},"src":"3727:68:1"},{"documentation":{"id":227,"nodeType":"StructuredDocumentation","src":"3801:174:1","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"a9fbf51f","id":231,"name":"ERC721InvalidApprover","nameLocation":"3986:21:1","nodeType":"ErrorDefinition","parameters":{"id":230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":229,"mutability":"mutable","name":"approver","nameLocation":"4016:8:1","nodeType":"VariableDeclaration","scope":231,"src":"4008:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":228,"name":"address","nodeType":"ElementaryTypeName","src":"4008:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4007:18:1"},"src":"3980:46:1"},{"documentation":{"id":232,"nodeType":"StructuredDocumentation","src":"4032:197:1","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"5b08ba18","id":236,"name":"ERC721InvalidOperator","nameLocation":"4240:21:1","nodeType":"ErrorDefinition","parameters":{"id":235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":234,"mutability":"mutable","name":"operator","nameLocation":"4270:8:1","nodeType":"VariableDeclaration","scope":236,"src":"4262:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":233,"name":"address","nodeType":"ElementaryTypeName","src":"4262:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4261:18:1"},"src":"4234:46:1"}],"scope":285,"src":"2190:2092:1","usedErrors":[195,200,209,214,219,226,231,236],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1155Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":238,"nodeType":"StructuredDocumentation","src":"4284:145:1","text":" @dev Standard ERC-1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens."},"fullyImplemented":true,"id":284,"linearizedBaseContracts":[284],"name":"IERC1155Errors","nameLocation":"4440:14:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":239,"nodeType":"StructuredDocumentation","src":"4461:361:1","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token."},"errorSelector":"03dee4c5","id":249,"name":"ERC1155InsufficientBalance","nameLocation":"4833:26:1","nodeType":"ErrorDefinition","parameters":{"id":248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":241,"mutability":"mutable","name":"sender","nameLocation":"4868:6:1","nodeType":"VariableDeclaration","scope":249,"src":"4860:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":240,"name":"address","nodeType":"ElementaryTypeName","src":"4860:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":243,"mutability":"mutable","name":"balance","nameLocation":"4884:7:1","nodeType":"VariableDeclaration","scope":249,"src":"4876:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":242,"name":"uint256","nodeType":"ElementaryTypeName","src":"4876:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":245,"mutability":"mutable","name":"needed","nameLocation":"4901:6:1","nodeType":"VariableDeclaration","scope":249,"src":"4893:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":244,"name":"uint256","nodeType":"ElementaryTypeName","src":"4893:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":247,"mutability":"mutable","name":"tokenId","nameLocation":"4917:7:1","nodeType":"VariableDeclaration","scope":249,"src":"4909:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":246,"name":"uint256","nodeType":"ElementaryTypeName","src":"4909:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4859:66:1"},"src":"4827:99:1"},{"documentation":{"id":250,"nodeType":"StructuredDocumentation","src":"4932:152:1","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"01a83514","id":254,"name":"ERC1155InvalidSender","nameLocation":"5095:20:1","nodeType":"ErrorDefinition","parameters":{"id":253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":252,"mutability":"mutable","name":"sender","nameLocation":"5124:6:1","nodeType":"VariableDeclaration","scope":254,"src":"5116:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":251,"name":"address","nodeType":"ElementaryTypeName","src":"5116:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5115:16:1"},"src":"5089:43:1"},{"documentation":{"id":255,"nodeType":"StructuredDocumentation","src":"5138:159:1","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"57f447ce","id":259,"name":"ERC1155InvalidReceiver","nameLocation":"5308:22:1","nodeType":"ErrorDefinition","parameters":{"id":258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":257,"mutability":"mutable","name":"receiver","nameLocation":"5339:8:1","nodeType":"VariableDeclaration","scope":259,"src":"5331:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":256,"name":"address","nodeType":"ElementaryTypeName","src":"5331:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5330:18:1"},"src":"5302:47:1"},{"documentation":{"id":260,"nodeType":"StructuredDocumentation","src":"5355:256:1","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token."},"errorSelector":"e237d922","id":266,"name":"ERC1155MissingApprovalForAll","nameLocation":"5622:28:1","nodeType":"ErrorDefinition","parameters":{"id":265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":262,"mutability":"mutable","name":"operator","nameLocation":"5659:8:1","nodeType":"VariableDeclaration","scope":266,"src":"5651:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":261,"name":"address","nodeType":"ElementaryTypeName","src":"5651:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":264,"mutability":"mutable","name":"owner","nameLocation":"5677:5:1","nodeType":"VariableDeclaration","scope":266,"src":"5669:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":263,"name":"address","nodeType":"ElementaryTypeName","src":"5669:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5650:33:1"},"src":"5616:68:1"},{"documentation":{"id":267,"nodeType":"StructuredDocumentation","src":"5690:174:1","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"3e31884e","id":271,"name":"ERC1155InvalidApprover","nameLocation":"5875:22:1","nodeType":"ErrorDefinition","parameters":{"id":270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":269,"mutability":"mutable","name":"approver","nameLocation":"5906:8:1","nodeType":"VariableDeclaration","scope":271,"src":"5898:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":268,"name":"address","nodeType":"ElementaryTypeName","src":"5898:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5897:18:1"},"src":"5869:47:1"},{"documentation":{"id":272,"nodeType":"StructuredDocumentation","src":"5922:197:1","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"ced3e100","id":276,"name":"ERC1155InvalidOperator","nameLocation":"6130:22:1","nodeType":"ErrorDefinition","parameters":{"id":275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":274,"mutability":"mutable","name":"operator","nameLocation":"6161:8:1","nodeType":"VariableDeclaration","scope":276,"src":"6153:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":273,"name":"address","nodeType":"ElementaryTypeName","src":"6153:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6152:18:1"},"src":"6124:47:1"},{"documentation":{"id":277,"nodeType":"StructuredDocumentation","src":"6177:280:1","text":" @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts"},"errorSelector":"5b059991","id":283,"name":"ERC1155InvalidArrayLength","nameLocation":"6468:25:1","nodeType":"ErrorDefinition","parameters":{"id":282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":279,"mutability":"mutable","name":"idsLength","nameLocation":"6502:9:1","nodeType":"VariableDeclaration","scope":283,"src":"6494:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":278,"name":"uint256","nodeType":"ElementaryTypeName","src":"6494:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":281,"mutability":"mutable","name":"valuesLength","nameLocation":"6521:12:1","nodeType":"VariableDeclaration","scope":283,"src":"6513:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":280,"name":"uint256","nodeType":"ElementaryTypeName","src":"6513:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6493:41:1"},"src":"6462:73:1"}],"scope":285,"src":"4430:2107:1","usedErrors":[249,254,259,266,271,276,283],"usedEvents":[]}],"src":"112:6426:1"},"id":1},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","exportedSymbols":{"Context":[933],"ERC20":[799],"IERC20":[877],"IERC20Errors":[189],"IERC20Metadata":[903]},"id":800,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":286,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"105:24:2"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"./IERC20.sol","id":288,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":800,"sourceUnit":878,"src":"131:36:2","symbolAliases":[{"foreign":{"id":287,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":877,"src":"139:6:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"./extensions/IERC20Metadata.sol","id":290,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":800,"sourceUnit":904,"src":"168:63:2","symbolAliases":[{"foreign":{"id":289,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"176:14:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../../utils/Context.sol","id":292,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":800,"sourceUnit":934,"src":"232:48:2","symbolAliases":[{"foreign":{"id":291,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":933,"src":"240:7:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","file":"../../interfaces/draft-IERC6093.sol","id":294,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":800,"sourceUnit":285,"src":"281:65:2","symbolAliases":[{"foreign":{"id":293,"name":"IERC20Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":189,"src":"289:12:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":296,"name":"Context","nameLocations":["1133:7:2"],"nodeType":"IdentifierPath","referencedDeclaration":933,"src":"1133:7:2"},"id":297,"nodeType":"InheritanceSpecifier","src":"1133:7:2"},{"baseName":{"id":298,"name":"IERC20","nameLocations":["1142:6:2"],"nodeType":"IdentifierPath","referencedDeclaration":877,"src":"1142:6:2"},"id":299,"nodeType":"InheritanceSpecifier","src":"1142:6:2"},{"baseName":{"id":300,"name":"IERC20Metadata","nameLocations":["1150:14:2"],"nodeType":"IdentifierPath","referencedDeclaration":903,"src":"1150:14:2"},"id":301,"nodeType":"InheritanceSpecifier","src":"1150:14:2"},{"baseName":{"id":302,"name":"IERC20Errors","nameLocations":["1166:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":189,"src":"1166:12:2"},"id":303,"nodeType":"InheritanceSpecifier","src":"1166:12:2"}],"canonicalName":"ERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":295,"nodeType":"StructuredDocumentation","src":"348:757:2","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 TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n The default value of {decimals} is 18. To change this, you should override\n this function so it returns a different value.\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC-20\n applications."},"fullyImplemented":true,"id":799,"linearizedBaseContracts":[799,189,903,877,933],"name":"ERC20","nameLocation":"1124:5:2","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":307,"mutability":"mutable","name":"_balances","nameLocation":"1229:9:2","nodeType":"VariableDeclaration","scope":799,"src":"1185:53:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":306,"keyName":"account","keyNameLocation":"1201:7:2","keyType":{"id":304,"name":"address","nodeType":"ElementaryTypeName","src":"1193:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1185:35:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":305,"name":"uint256","nodeType":"ElementaryTypeName","src":"1212:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":313,"mutability":"mutable","name":"_allowances","nameLocation":"1317:11:2","nodeType":"VariableDeclaration","scope":799,"src":"1245:83:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":312,"keyName":"account","keyNameLocation":"1261:7:2","keyType":{"id":308,"name":"address","nodeType":"ElementaryTypeName","src":"1253:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1245:63:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":311,"keyName":"spender","keyNameLocation":"1288:7:2","keyType":{"id":309,"name":"address","nodeType":"ElementaryTypeName","src":"1280:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1272:35:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":310,"name":"uint256","nodeType":"ElementaryTypeName","src":"1299:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":315,"mutability":"mutable","name":"_totalSupply","nameLocation":"1351:12:2","nodeType":"VariableDeclaration","scope":799,"src":"1335:28:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":314,"name":"uint256","nodeType":"ElementaryTypeName","src":"1335:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":317,"mutability":"mutable","name":"_name","nameLocation":"1385:5:2","nodeType":"VariableDeclaration","scope":799,"src":"1370:20:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":316,"name":"string","nodeType":"ElementaryTypeName","src":"1370:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":319,"mutability":"mutable","name":"_symbol","nameLocation":"1411:7:2","nodeType":"VariableDeclaration","scope":799,"src":"1396:22:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":318,"name":"string","nodeType":"ElementaryTypeName","src":"1396:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":335,"nodeType":"Block","src":"1638:57:2","statements":[{"expression":{"id":329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":327,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":317,"src":"1648:5:2","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":328,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":322,"src":"1656:5:2","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1648:13:2","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":330,"nodeType":"ExpressionStatement","src":"1648:13:2"},{"expression":{"id":333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":331,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":319,"src":"1671:7:2","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":332,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":324,"src":"1681:7:2","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1671:17:2","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":334,"nodeType":"ExpressionStatement","src":"1671:17:2"}]},"documentation":{"id":320,"nodeType":"StructuredDocumentation","src":"1425:152:2","text":" @dev Sets the values for {name} and {symbol}.\n Both values are immutable: they can only be set once during construction."},"id":336,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":322,"mutability":"mutable","name":"name_","nameLocation":"1608:5:2","nodeType":"VariableDeclaration","scope":336,"src":"1594:19:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":321,"name":"string","nodeType":"ElementaryTypeName","src":"1594:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":324,"mutability":"mutable","name":"symbol_","nameLocation":"1629:7:2","nodeType":"VariableDeclaration","scope":336,"src":"1615:21:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":323,"name":"string","nodeType":"ElementaryTypeName","src":"1615:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1593:44:2"},"returnParameters":{"id":326,"nodeType":"ParameterList","parameters":[],"src":"1638:0:2"},"scope":799,"src":"1582:113:2","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[890],"body":{"id":344,"nodeType":"Block","src":"1820:29:2","statements":[{"expression":{"id":342,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":317,"src":"1837:5:2","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":341,"id":343,"nodeType":"Return","src":"1830:12:2"}]},"documentation":{"id":337,"nodeType":"StructuredDocumentation","src":"1701:54:2","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":345,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"1769:4:2","nodeType":"FunctionDefinition","parameters":{"id":338,"nodeType":"ParameterList","parameters":[],"src":"1773:2:2"},"returnParameters":{"id":341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":340,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":345,"src":"1805:13:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":339,"name":"string","nodeType":"ElementaryTypeName","src":"1805:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1804:15:2"},"scope":799,"src":"1760:89:2","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[896],"body":{"id":353,"nodeType":"Block","src":"2024:31:2","statements":[{"expression":{"id":351,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":319,"src":"2041:7:2","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":350,"id":352,"nodeType":"Return","src":"2034:14:2"}]},"documentation":{"id":346,"nodeType":"StructuredDocumentation","src":"1855:102:2","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":354,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"1971:6:2","nodeType":"FunctionDefinition","parameters":{"id":347,"nodeType":"ParameterList","parameters":[],"src":"1977:2:2"},"returnParameters":{"id":350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":349,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":354,"src":"2009:13:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":348,"name":"string","nodeType":"ElementaryTypeName","src":"2009:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2008:15:2"},"scope":799,"src":"1962:93:2","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[902],"body":{"id":362,"nodeType":"Block","src":"2744:26:2","statements":[{"expression":{"hexValue":"3138","id":360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2761:2:2","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"functionReturnParameters":359,"id":361,"nodeType":"Return","src":"2754:9:2"}]},"documentation":{"id":355,"nodeType":"StructuredDocumentation","src":"2061:622:2","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 default value returned by this function, unless\n it's overridden.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."},"functionSelector":"313ce567","id":363,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"2697:8:2","nodeType":"FunctionDefinition","parameters":{"id":356,"nodeType":"ParameterList","parameters":[],"src":"2705:2:2"},"returnParameters":{"id":359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":358,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":363,"src":"2737:5:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":357,"name":"uint8","nodeType":"ElementaryTypeName","src":"2737:5:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2736:7:2"},"scope":799,"src":"2688:82:2","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[826],"body":{"id":371,"nodeType":"Block","src":"2891:36:2","statements":[{"expression":{"id":369,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":315,"src":"2908:12:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":368,"id":370,"nodeType":"Return","src":"2901:19:2"}]},"documentation":{"id":364,"nodeType":"StructuredDocumentation","src":"2776:49:2","text":" @dev See {IERC20-totalSupply}."},"functionSelector":"18160ddd","id":372,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"2839:11:2","nodeType":"FunctionDefinition","parameters":{"id":365,"nodeType":"ParameterList","parameters":[],"src":"2850:2:2"},"returnParameters":{"id":368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":372,"src":"2882:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":366,"name":"uint256","nodeType":"ElementaryTypeName","src":"2882:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2881:9:2"},"scope":799,"src":"2830:97:2","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[834],"body":{"id":384,"nodeType":"Block","src":"3059:42:2","statements":[{"expression":{"baseExpression":{"id":380,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":307,"src":"3076:9:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":382,"indexExpression":{"id":381,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"3086:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3076:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":379,"id":383,"nodeType":"Return","src":"3069:25:2"}]},"documentation":{"id":373,"nodeType":"StructuredDocumentation","src":"2933:47:2","text":" @dev See {IERC20-balanceOf}."},"functionSelector":"70a08231","id":385,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"2994:9:2","nodeType":"FunctionDefinition","parameters":{"id":376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":375,"mutability":"mutable","name":"account","nameLocation":"3012:7:2","nodeType":"VariableDeclaration","scope":385,"src":"3004:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":374,"name":"address","nodeType":"ElementaryTypeName","src":"3004:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3003:17:2"},"returnParameters":{"id":379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":378,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":385,"src":"3050:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":377,"name":"uint256","nodeType":"ElementaryTypeName","src":"3050:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3049:9:2"},"scope":799,"src":"2985:116:2","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[844],"body":{"id":408,"nodeType":"Block","src":"3371:103:2","statements":[{"assignments":[396],"declarations":[{"constant":false,"id":396,"mutability":"mutable","name":"owner","nameLocation":"3389:5:2","nodeType":"VariableDeclaration","scope":408,"src":"3381:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":395,"name":"address","nodeType":"ElementaryTypeName","src":"3381:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":399,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":397,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":915,"src":"3397:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3397:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3381:28:2"},{"expression":{"arguments":[{"id":401,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":396,"src":"3429:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":402,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":388,"src":"3436:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":403,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":390,"src":"3440:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":400,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"3419:9:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3419:27:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":405,"nodeType":"ExpressionStatement","src":"3419:27:2"},{"expression":{"hexValue":"74727565","id":406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3463:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":394,"id":407,"nodeType":"Return","src":"3456:11:2"}]},"documentation":{"id":386,"nodeType":"StructuredDocumentation","src":"3107:184:2","text":" @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `value`."},"functionSelector":"a9059cbb","id":409,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"3305:8:2","nodeType":"FunctionDefinition","parameters":{"id":391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":388,"mutability":"mutable","name":"to","nameLocation":"3322:2:2","nodeType":"VariableDeclaration","scope":409,"src":"3314:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":387,"name":"address","nodeType":"ElementaryTypeName","src":"3314:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":390,"mutability":"mutable","name":"value","nameLocation":"3334:5:2","nodeType":"VariableDeclaration","scope":409,"src":"3326:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":389,"name":"uint256","nodeType":"ElementaryTypeName","src":"3326:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3313:27:2"},"returnParameters":{"id":394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":393,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":409,"src":"3365:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":392,"name":"bool","nodeType":"ElementaryTypeName","src":"3365:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3364:6:2"},"scope":799,"src":"3296:178:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[854],"body":{"id":425,"nodeType":"Block","src":"3621:51:2","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":419,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":313,"src":"3638:11:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":421,"indexExpression":{"id":420,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":412,"src":"3650:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3638:18:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":423,"indexExpression":{"id":422,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":414,"src":"3657:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3638:27:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":418,"id":424,"nodeType":"Return","src":"3631:34:2"}]},"documentation":{"id":410,"nodeType":"StructuredDocumentation","src":"3480:47:2","text":" @dev See {IERC20-allowance}."},"functionSelector":"dd62ed3e","id":426,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"3541:9:2","nodeType":"FunctionDefinition","parameters":{"id":415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":412,"mutability":"mutable","name":"owner","nameLocation":"3559:5:2","nodeType":"VariableDeclaration","scope":426,"src":"3551:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":411,"name":"address","nodeType":"ElementaryTypeName","src":"3551:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":414,"mutability":"mutable","name":"spender","nameLocation":"3574:7:2","nodeType":"VariableDeclaration","scope":426,"src":"3566:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":413,"name":"address","nodeType":"ElementaryTypeName","src":"3566:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3550:32:2"},"returnParameters":{"id":418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":426,"src":"3612:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":416,"name":"uint256","nodeType":"ElementaryTypeName","src":"3612:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3611:9:2"},"scope":799,"src":"3532:140:2","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[864],"body":{"id":449,"nodeType":"Block","src":"4058:107:2","statements":[{"assignments":[437],"declarations":[{"constant":false,"id":437,"mutability":"mutable","name":"owner","nameLocation":"4076:5:2","nodeType":"VariableDeclaration","scope":449,"src":"4068:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":436,"name":"address","nodeType":"ElementaryTypeName","src":"4068:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":440,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":438,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":915,"src":"4084:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4084:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4068:28:2"},{"expression":{"arguments":[{"id":442,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":437,"src":"4115:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":443,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":429,"src":"4122:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":444,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":431,"src":"4131:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":441,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[690,750],"referencedDeclaration":690,"src":"4106:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4106:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":446,"nodeType":"ExpressionStatement","src":"4106:31:2"},{"expression":{"hexValue":"74727565","id":447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4154:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":435,"id":448,"nodeType":"Return","src":"4147:11:2"}]},"documentation":{"id":427,"nodeType":"StructuredDocumentation","src":"3678:296:2","text":" @dev See {IERC20-approve}.\n NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":450,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"3988:7:2","nodeType":"FunctionDefinition","parameters":{"id":432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":429,"mutability":"mutable","name":"spender","nameLocation":"4004:7:2","nodeType":"VariableDeclaration","scope":450,"src":"3996:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":428,"name":"address","nodeType":"ElementaryTypeName","src":"3996:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":431,"mutability":"mutable","name":"value","nameLocation":"4021:5:2","nodeType":"VariableDeclaration","scope":450,"src":"4013:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":430,"name":"uint256","nodeType":"ElementaryTypeName","src":"4013:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3995:32:2"},"returnParameters":{"id":435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":434,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":450,"src":"4052:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":433,"name":"bool","nodeType":"ElementaryTypeName","src":"4052:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4051:6:2"},"scope":799,"src":"3979:186:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[876],"body":{"id":481,"nodeType":"Block","src":"4850:151:2","statements":[{"assignments":[463],"declarations":[{"constant":false,"id":463,"mutability":"mutable","name":"spender","nameLocation":"4868:7:2","nodeType":"VariableDeclaration","scope":481,"src":"4860:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":462,"name":"address","nodeType":"ElementaryTypeName","src":"4860:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":466,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":464,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":915,"src":"4878:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4878:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4860:30:2"},{"expression":{"arguments":[{"id":468,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":453,"src":"4916:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":469,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":463,"src":"4922:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":470,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":457,"src":"4931:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":467,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":798,"src":"4900:15:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4900:37:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":472,"nodeType":"ExpressionStatement","src":"4900:37:2"},{"expression":{"arguments":[{"id":474,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":453,"src":"4957:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":475,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":455,"src":"4963:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":476,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":457,"src":"4967:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":473,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"4947:9:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4947:26:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":478,"nodeType":"ExpressionStatement","src":"4947:26:2"},{"expression":{"hexValue":"74727565","id":479,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4990:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":461,"id":480,"nodeType":"Return","src":"4983:11:2"}]},"documentation":{"id":451,"nodeType":"StructuredDocumentation","src":"4171:581:2","text":" @dev See {IERC20-transferFrom}.\n Skips emitting an {Approval} event indicating an allowance update. This is not\n required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `value`.\n - the caller must have allowance for ``from``'s tokens of at least\n `value`."},"functionSelector":"23b872dd","id":482,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4766:12:2","nodeType":"FunctionDefinition","parameters":{"id":458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":453,"mutability":"mutable","name":"from","nameLocation":"4787:4:2","nodeType":"VariableDeclaration","scope":482,"src":"4779:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":452,"name":"address","nodeType":"ElementaryTypeName","src":"4779:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":455,"mutability":"mutable","name":"to","nameLocation":"4801:2:2","nodeType":"VariableDeclaration","scope":482,"src":"4793:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":454,"name":"address","nodeType":"ElementaryTypeName","src":"4793:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":457,"mutability":"mutable","name":"value","nameLocation":"4813:5:2","nodeType":"VariableDeclaration","scope":482,"src":"4805:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":456,"name":"uint256","nodeType":"ElementaryTypeName","src":"4805:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4778:41:2"},"returnParameters":{"id":461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":460,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":482,"src":"4844:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":459,"name":"bool","nodeType":"ElementaryTypeName","src":"4844:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4843:6:2"},"scope":799,"src":"4757:244:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":528,"nodeType":"Block","src":"5443:231:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":492,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":485,"src":"5457:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5473:1:2","typeDescriptions":{"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":494,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5465:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":493,"name":"address","nodeType":"ElementaryTypeName","src":"5465:7:2","typeDescriptions":{}}},"id":496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5465:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5457:18:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":506,"nodeType":"IfStatement","src":"5453:86:2","trueBody":{"id":505,"nodeType":"Block","src":"5477:62:2","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5525:1:2","typeDescriptions":{"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":500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5517:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":499,"name":"address","nodeType":"ElementaryTypeName","src":"5517:7:2","typeDescriptions":{}}},"id":502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5517:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":498,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":164,"src":"5498:18:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5498:30:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":504,"nodeType":"RevertStatement","src":"5491:37:2"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":507,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":487,"src":"5552:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5566:1:2","typeDescriptions":{"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":509,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5558:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":508,"name":"address","nodeType":"ElementaryTypeName","src":"5558:7:2","typeDescriptions":{}}},"id":511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5558:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5552:16:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":521,"nodeType":"IfStatement","src":"5548:86:2","trueBody":{"id":520,"nodeType":"Block","src":"5570:64:2","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5620:1:2","typeDescriptions":{"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":515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5612:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":514,"name":"address","nodeType":"ElementaryTypeName","src":"5612:7:2","typeDescriptions":{}}},"id":517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5612:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":513,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":169,"src":"5591:20:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5591:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":519,"nodeType":"RevertStatement","src":"5584:39:2"}]}},{"expression":{"arguments":[{"id":523,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":485,"src":"5651:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":524,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":487,"src":"5657:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":525,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":489,"src":"5661:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":522,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":606,"src":"5643:7:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5643:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":527,"nodeType":"ExpressionStatement","src":"5643:24:2"}]},"documentation":{"id":483,"nodeType":"StructuredDocumentation","src":"5007:362:2","text":" @dev Moves a `value` amount of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":529,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"5383:9:2","nodeType":"FunctionDefinition","parameters":{"id":490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":485,"mutability":"mutable","name":"from","nameLocation":"5401:4:2","nodeType":"VariableDeclaration","scope":529,"src":"5393:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":484,"name":"address","nodeType":"ElementaryTypeName","src":"5393:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":487,"mutability":"mutable","name":"to","nameLocation":"5415:2:2","nodeType":"VariableDeclaration","scope":529,"src":"5407:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":486,"name":"address","nodeType":"ElementaryTypeName","src":"5407:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":489,"mutability":"mutable","name":"value","nameLocation":"5427:5:2","nodeType":"VariableDeclaration","scope":529,"src":"5419:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":488,"name":"uint256","nodeType":"ElementaryTypeName","src":"5419:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5392:41:2"},"returnParameters":{"id":491,"nodeType":"ParameterList","parameters":[],"src":"5443:0:2"},"scope":799,"src":"5374:300:2","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":605,"nodeType":"Block","src":"6064:1032:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":539,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"6078:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6094:1:2","typeDescriptions":{"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":541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6086:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":540,"name":"address","nodeType":"ElementaryTypeName","src":"6086:7:2","typeDescriptions":{}}},"id":543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6086:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6078:18:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":576,"nodeType":"Block","src":"6252:362:2","statements":[{"assignments":[551],"declarations":[{"constant":false,"id":551,"mutability":"mutable","name":"fromBalance","nameLocation":"6274:11:2","nodeType":"VariableDeclaration","scope":576,"src":"6266:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":550,"name":"uint256","nodeType":"ElementaryTypeName","src":"6266:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":555,"initialValue":{"baseExpression":{"id":552,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":307,"src":"6288:9:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":554,"indexExpression":{"id":553,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"6298:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6288:15:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6266:37:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":556,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":551,"src":"6321:11:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":557,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"6335:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6321:19:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":566,"nodeType":"IfStatement","src":"6317:115:2","trueBody":{"id":565,"nodeType":"Block","src":"6342:90:2","statements":[{"errorCall":{"arguments":[{"id":560,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"6392:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":561,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":551,"src":"6398:11:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":562,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"6411:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":559,"name":"ERC20InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":159,"src":"6367:24:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6367:50:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":564,"nodeType":"RevertStatement","src":"6360:57:2"}]}},{"id":575,"nodeType":"UncheckedBlock","src":"6445:159:2","statements":[{"expression":{"id":573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":567,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":307,"src":"6552:9:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":569,"indexExpression":{"id":568,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"6562:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6552:15:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":570,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":551,"src":"6570:11:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":571,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"6584:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6570:19:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6552:37:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":574,"nodeType":"ExpressionStatement","src":"6552:37:2"}]}]},"id":577,"nodeType":"IfStatement","src":"6074:540:2","trueBody":{"id":549,"nodeType":"Block","src":"6098:148:2","statements":[{"expression":{"id":547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":545,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":315,"src":"6214:12:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":546,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"6230:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6214:21:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":548,"nodeType":"ExpressionStatement","src":"6214:21:2"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":578,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":534,"src":"6628:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6642:1:2","typeDescriptions":{"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":580,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6634:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":579,"name":"address","nodeType":"ElementaryTypeName","src":"6634:7:2","typeDescriptions":{}}},"id":582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6634:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6628:16:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":597,"nodeType":"Block","src":"6843:206:2","statements":[{"id":596,"nodeType":"UncheckedBlock","src":"6857:182:2","statements":[{"expression":{"id":594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":590,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":307,"src":"7002:9:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":592,"indexExpression":{"id":591,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":534,"src":"7012:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7002:13:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":593,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"7019:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7002:22:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":595,"nodeType":"ExpressionStatement","src":"7002:22:2"}]}]},"id":598,"nodeType":"IfStatement","src":"6624:425:2","trueBody":{"id":589,"nodeType":"Block","src":"6646:191:2","statements":[{"id":588,"nodeType":"UncheckedBlock","src":"6660:167:2","statements":[{"expression":{"id":586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":584,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":315,"src":"6791:12:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":585,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"6807:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6791:21:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":587,"nodeType":"ExpressionStatement","src":"6791:21:2"}]}]}},{"eventCall":{"arguments":[{"id":600,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"7073:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":601,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":534,"src":"7079:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":602,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"7083:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":599,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":811,"src":"7064:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7064:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":604,"nodeType":"EmitStatement","src":"7059:30:2"}]},"documentation":{"id":530,"nodeType":"StructuredDocumentation","src":"5680:304:2","text":" @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n this function.\n Emits a {Transfer} event."},"id":606,"implemented":true,"kind":"function","modifiers":[],"name":"_update","nameLocation":"5998:7:2","nodeType":"FunctionDefinition","parameters":{"id":537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":532,"mutability":"mutable","name":"from","nameLocation":"6014:4:2","nodeType":"VariableDeclaration","scope":606,"src":"6006:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":531,"name":"address","nodeType":"ElementaryTypeName","src":"6006:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":534,"mutability":"mutable","name":"to","nameLocation":"6028:2:2","nodeType":"VariableDeclaration","scope":606,"src":"6020:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":533,"name":"address","nodeType":"ElementaryTypeName","src":"6020:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":536,"mutability":"mutable","name":"value","nameLocation":"6040:5:2","nodeType":"VariableDeclaration","scope":606,"src":"6032:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":535,"name":"uint256","nodeType":"ElementaryTypeName","src":"6032:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6005:41:2"},"returnParameters":{"id":538,"nodeType":"ParameterList","parameters":[],"src":"6064:0:2"},"scope":799,"src":"5989:1107:2","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":638,"nodeType":"Block","src":"7495:152:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":614,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"7509:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7528:1:2","typeDescriptions":{"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":616,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7520:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":615,"name":"address","nodeType":"ElementaryTypeName","src":"7520:7:2","typeDescriptions":{}}},"id":618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7520:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7509:21:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":628,"nodeType":"IfStatement","src":"7505:91:2","trueBody":{"id":627,"nodeType":"Block","src":"7532:64:2","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7582:1:2","typeDescriptions":{"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":622,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7574:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":621,"name":"address","nodeType":"ElementaryTypeName","src":"7574:7:2","typeDescriptions":{}}},"id":624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7574:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":620,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":169,"src":"7553:20:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7553:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":626,"nodeType":"RevertStatement","src":"7546:39:2"}]}},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7621:1:2","typeDescriptions":{"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":631,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7613:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":630,"name":"address","nodeType":"ElementaryTypeName","src":"7613:7:2","typeDescriptions":{}}},"id":633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7613:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":634,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"7625:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":635,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":611,"src":"7634:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":629,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":606,"src":"7605:7:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7605:35:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":637,"nodeType":"ExpressionStatement","src":"7605:35:2"}]},"documentation":{"id":607,"nodeType":"StructuredDocumentation","src":"7102:332:2","text":" @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n Relies on the `_update` mechanism\n Emits a {Transfer} event with `from` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":639,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"7448:5:2","nodeType":"FunctionDefinition","parameters":{"id":612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":609,"mutability":"mutable","name":"account","nameLocation":"7462:7:2","nodeType":"VariableDeclaration","scope":639,"src":"7454:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":608,"name":"address","nodeType":"ElementaryTypeName","src":"7454:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":611,"mutability":"mutable","name":"value","nameLocation":"7479:5:2","nodeType":"VariableDeclaration","scope":639,"src":"7471:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":610,"name":"uint256","nodeType":"ElementaryTypeName","src":"7471:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7453:32:2"},"returnParameters":{"id":613,"nodeType":"ParameterList","parameters":[],"src":"7495:0:2"},"scope":799,"src":"7439:208:2","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":671,"nodeType":"Block","src":"8021:150:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":647,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":642,"src":"8035:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8054:1:2","typeDescriptions":{"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":649,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8046:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":648,"name":"address","nodeType":"ElementaryTypeName","src":"8046:7:2","typeDescriptions":{}}},"id":651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8046:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8035:21:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":661,"nodeType":"IfStatement","src":"8031:89:2","trueBody":{"id":660,"nodeType":"Block","src":"8058:62:2","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8106:1:2","typeDescriptions":{"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":655,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8098:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":654,"name":"address","nodeType":"ElementaryTypeName","src":"8098:7:2","typeDescriptions":{}}},"id":657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8098:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":653,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":164,"src":"8079:18:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8079:30:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":659,"nodeType":"RevertStatement","src":"8072:37:2"}]}},{"expression":{"arguments":[{"id":663,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":642,"src":"8137:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8154:1:2","typeDescriptions":{"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":665,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8146:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":664,"name":"address","nodeType":"ElementaryTypeName","src":"8146:7:2","typeDescriptions":{}}},"id":667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8146:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":668,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":644,"src":"8158:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":662,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":606,"src":"8129:7:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8129:35:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":670,"nodeType":"ExpressionStatement","src":"8129:35:2"}]},"documentation":{"id":640,"nodeType":"StructuredDocumentation","src":"7653:307:2","text":" @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n Relies on the `_update` mechanism.\n Emits a {Transfer} event with `to` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead"},"id":672,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"7974:5:2","nodeType":"FunctionDefinition","parameters":{"id":645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":642,"mutability":"mutable","name":"account","nameLocation":"7988:7:2","nodeType":"VariableDeclaration","scope":672,"src":"7980:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":641,"name":"address","nodeType":"ElementaryTypeName","src":"7980:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":644,"mutability":"mutable","name":"value","nameLocation":"8005:5:2","nodeType":"VariableDeclaration","scope":672,"src":"7997:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":643,"name":"uint256","nodeType":"ElementaryTypeName","src":"7997:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7979:32:2"},"returnParameters":{"id":646,"nodeType":"ParameterList","parameters":[],"src":"8021:0:2"},"scope":799,"src":"7965:206:2","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":689,"nodeType":"Block","src":"8781:54:2","statements":[{"expression":{"arguments":[{"id":683,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":675,"src":"8800:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":684,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":677,"src":"8807:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":685,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":679,"src":"8816:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8823:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":682,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[690,750],"referencedDeclaration":750,"src":"8791:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8791:37:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":688,"nodeType":"ExpressionStatement","src":"8791:37:2"}]},"documentation":{"id":673,"nodeType":"StructuredDocumentation","src":"8177:525:2","text":" @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address.\n Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument."},"id":690,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"8716:8:2","nodeType":"FunctionDefinition","parameters":{"id":680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":675,"mutability":"mutable","name":"owner","nameLocation":"8733:5:2","nodeType":"VariableDeclaration","scope":690,"src":"8725:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":674,"name":"address","nodeType":"ElementaryTypeName","src":"8725:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":677,"mutability":"mutable","name":"spender","nameLocation":"8748:7:2","nodeType":"VariableDeclaration","scope":690,"src":"8740:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":676,"name":"address","nodeType":"ElementaryTypeName","src":"8740:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":679,"mutability":"mutable","name":"value","nameLocation":"8765:5:2","nodeType":"VariableDeclaration","scope":690,"src":"8757:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":678,"name":"uint256","nodeType":"ElementaryTypeName","src":"8757:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8724:47:2"},"returnParameters":{"id":681,"nodeType":"ParameterList","parameters":[],"src":"8781:0:2"},"scope":799,"src":"8707:128:2","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":749,"nodeType":"Block","src":"9780:334:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":702,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"9794:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9811:1:2","typeDescriptions":{"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":704,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9803:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":703,"name":"address","nodeType":"ElementaryTypeName","src":"9803:7:2","typeDescriptions":{}}},"id":706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9803:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9794:19:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":716,"nodeType":"IfStatement","src":"9790:89:2","trueBody":{"id":715,"nodeType":"Block","src":"9815:64:2","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9865:1:2","typeDescriptions":{"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":710,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9857:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":709,"name":"address","nodeType":"ElementaryTypeName","src":"9857:7:2","typeDescriptions":{}}},"id":712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9857:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":708,"name":"ERC20InvalidApprover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":183,"src":"9836:20:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9836:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":714,"nodeType":"RevertStatement","src":"9829:39:2"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":717,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"9892:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9911:1:2","typeDescriptions":{"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":719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9903:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":718,"name":"address","nodeType":"ElementaryTypeName","src":"9903:7:2","typeDescriptions":{}}},"id":721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9903:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9892:21:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":731,"nodeType":"IfStatement","src":"9888:90:2","trueBody":{"id":730,"nodeType":"Block","src":"9915:63:2","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":726,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9964:1:2","typeDescriptions":{"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":725,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9956:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":724,"name":"address","nodeType":"ElementaryTypeName","src":"9956:7:2","typeDescriptions":{}}},"id":727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9956:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":723,"name":"ERC20InvalidSpender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":188,"src":"9936:19:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9936:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":729,"nodeType":"RevertStatement","src":"9929:38:2"}]}},{"expression":{"id":738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":732,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":313,"src":"9987:11:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":735,"indexExpression":{"id":733,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"9999:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9987:18:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":736,"indexExpression":{"id":734,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"10006:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9987:27:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":737,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":697,"src":"10017:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9987:35:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":739,"nodeType":"ExpressionStatement","src":"9987:35:2"},{"condition":{"id":740,"name":"emitEvent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":699,"src":"10036:9:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":748,"nodeType":"IfStatement","src":"10032:76:2","trueBody":{"id":747,"nodeType":"Block","src":"10047:61:2","statements":[{"eventCall":{"arguments":[{"id":742,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"10075:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":743,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"10082:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":744,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":697,"src":"10091:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":741,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":820,"src":"10066:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10066:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":746,"nodeType":"EmitStatement","src":"10061:36:2"}]}}]},"documentation":{"id":691,"nodeType":"StructuredDocumentation","src":"8841:836:2","text":" @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n `Approval` event during `transferFrom` operations.\n Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n true using the following override:\n ```solidity\n function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n     super._approve(owner, spender, value, true);\n }\n ```\n Requirements are the same as {_approve}."},"id":750,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"9691:8:2","nodeType":"FunctionDefinition","parameters":{"id":700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":693,"mutability":"mutable","name":"owner","nameLocation":"9708:5:2","nodeType":"VariableDeclaration","scope":750,"src":"9700:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":692,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":695,"mutability":"mutable","name":"spender","nameLocation":"9723:7:2","nodeType":"VariableDeclaration","scope":750,"src":"9715:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":694,"name":"address","nodeType":"ElementaryTypeName","src":"9715:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":697,"mutability":"mutable","name":"value","nameLocation":"9740:5:2","nodeType":"VariableDeclaration","scope":750,"src":"9732:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":696,"name":"uint256","nodeType":"ElementaryTypeName","src":"9732:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":699,"mutability":"mutable","name":"emitEvent","nameLocation":"9752:9:2","nodeType":"VariableDeclaration","scope":750,"src":"9747:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":698,"name":"bool","nodeType":"ElementaryTypeName","src":"9747:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9699:63:2"},"returnParameters":{"id":701,"nodeType":"ParameterList","parameters":[],"src":"9780:0:2"},"scope":799,"src":"9682:432:2","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":797,"nodeType":"Block","src":"10485:387:2","statements":[{"assignments":[761],"declarations":[{"constant":false,"id":761,"mutability":"mutable","name":"currentAllowance","nameLocation":"10503:16:2","nodeType":"VariableDeclaration","scope":797,"src":"10495:24:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":760,"name":"uint256","nodeType":"ElementaryTypeName","src":"10495:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":766,"initialValue":{"arguments":[{"id":763,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":753,"src":"10532:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":764,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"10539:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":762,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":426,"src":"10522:9:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10522:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10495:52:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":767,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":761,"src":"10561:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"arguments":[{"id":770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10585:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":769,"name":"uint256","nodeType":"ElementaryTypeName","src":"10585:7:2","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":768,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10580:4:2","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10580:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":772,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10594:3:2","memberName":"max","nodeType":"MemberAccess","src":"10580:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10561:36:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":796,"nodeType":"IfStatement","src":"10557:309:2","trueBody":{"id":795,"nodeType":"Block","src":"10599:267:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":774,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":761,"src":"10617:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":775,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"10636:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10617:24:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":784,"nodeType":"IfStatement","src":"10613:130:2","trueBody":{"id":783,"nodeType":"Block","src":"10643:100:2","statements":[{"errorCall":{"arguments":[{"id":778,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"10695:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":779,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":761,"src":"10704:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":780,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"10722:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":777,"name":"ERC20InsufficientAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":178,"src":"10668:26:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10668:60:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":782,"nodeType":"RevertStatement","src":"10661:67:2"}]}},{"id":794,"nodeType":"UncheckedBlock","src":"10756:100:2","statements":[{"expression":{"arguments":[{"id":786,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":753,"src":"10793:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":787,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"10800:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":788,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":761,"src":"10809:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":789,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"10828:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10809:24:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10835:5:2","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":785,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[690,750],"referencedDeclaration":750,"src":"10784:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10784:57:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":793,"nodeType":"ExpressionStatement","src":"10784:57:2"}]}]}}]},"documentation":{"id":751,"nodeType":"StructuredDocumentation","src":"10120:271:2","text":" @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n Does not update the allowance value in case of infinite allowance.\n Revert if not enough allowance is available.\n Does not emit an {Approval} event."},"id":798,"implemented":true,"kind":"function","modifiers":[],"name":"_spendAllowance","nameLocation":"10405:15:2","nodeType":"FunctionDefinition","parameters":{"id":758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":753,"mutability":"mutable","name":"owner","nameLocation":"10429:5:2","nodeType":"VariableDeclaration","scope":798,"src":"10421:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":752,"name":"address","nodeType":"ElementaryTypeName","src":"10421:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":755,"mutability":"mutable","name":"spender","nameLocation":"10444:7:2","nodeType":"VariableDeclaration","scope":798,"src":"10436:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":754,"name":"address","nodeType":"ElementaryTypeName","src":"10436:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":757,"mutability":"mutable","name":"value","nameLocation":"10461:5:2","nodeType":"VariableDeclaration","scope":798,"src":"10453:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":756,"name":"uint256","nodeType":"ElementaryTypeName","src":"10453:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10420:47:2"},"returnParameters":{"id":759,"nodeType":"ParameterList","parameters":[],"src":"10485:0:2"},"scope":799,"src":"10396:476:2","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":800,"src":"1106:9768:2","usedErrors":[159,164,169,178,183,188],"usedEvents":[811,820]}],"src":"105:10770:2"},"id":2},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[877]},"id":878,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":801,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":802,"nodeType":"StructuredDocumentation","src":"132:71:3","text":" @dev Interface of the ERC-20 standard as defined in the ERC."},"fullyImplemented":false,"id":877,"linearizedBaseContracts":[877],"name":"IERC20","nameLocation":"214:6:3","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":803,"nodeType":"StructuredDocumentation","src":"227:158:3","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":811,"name":"Transfer","nameLocation":"396:8:3","nodeType":"EventDefinition","parameters":{"id":810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":805,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"421:4:3","nodeType":"VariableDeclaration","scope":811,"src":"405:20:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":804,"name":"address","nodeType":"ElementaryTypeName","src":"405:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":807,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"443:2:3","nodeType":"VariableDeclaration","scope":811,"src":"427:18:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":806,"name":"address","nodeType":"ElementaryTypeName","src":"427:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":809,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"455:5:3","nodeType":"VariableDeclaration","scope":811,"src":"447:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":808,"name":"uint256","nodeType":"ElementaryTypeName","src":"447:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"404:57:3"},"src":"390:72:3"},{"anonymous":false,"documentation":{"id":812,"nodeType":"StructuredDocumentation","src":"468:148:3","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":820,"name":"Approval","nameLocation":"627:8:3","nodeType":"EventDefinition","parameters":{"id":819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":814,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"652:5:3","nodeType":"VariableDeclaration","scope":820,"src":"636:21:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":813,"name":"address","nodeType":"ElementaryTypeName","src":"636:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":816,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"675:7:3","nodeType":"VariableDeclaration","scope":820,"src":"659:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":815,"name":"address","nodeType":"ElementaryTypeName","src":"659:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":818,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"692:5:3","nodeType":"VariableDeclaration","scope":820,"src":"684:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":817,"name":"uint256","nodeType":"ElementaryTypeName","src":"684:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"635:63:3"},"src":"621:78:3"},{"documentation":{"id":821,"nodeType":"StructuredDocumentation","src":"705:65:3","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":826,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"784:11:3","nodeType":"FunctionDefinition","parameters":{"id":822,"nodeType":"ParameterList","parameters":[],"src":"795:2:3"},"returnParameters":{"id":825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":824,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":826,"src":"821:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":823,"name":"uint256","nodeType":"ElementaryTypeName","src":"821:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"820:9:3"},"scope":877,"src":"775:55:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":827,"nodeType":"StructuredDocumentation","src":"836:71:3","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":834,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"921:9:3","nodeType":"FunctionDefinition","parameters":{"id":830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":829,"mutability":"mutable","name":"account","nameLocation":"939:7:3","nodeType":"VariableDeclaration","scope":834,"src":"931:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":828,"name":"address","nodeType":"ElementaryTypeName","src":"931:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"930:17:3"},"returnParameters":{"id":833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":832,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":834,"src":"971:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":831,"name":"uint256","nodeType":"ElementaryTypeName","src":"971:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"970:9:3"},"scope":877,"src":"912:68:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":835,"nodeType":"StructuredDocumentation","src":"986:213:3","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":844,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1213:8:3","nodeType":"FunctionDefinition","parameters":{"id":840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":837,"mutability":"mutable","name":"to","nameLocation":"1230:2:3","nodeType":"VariableDeclaration","scope":844,"src":"1222:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":836,"name":"address","nodeType":"ElementaryTypeName","src":"1222:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":839,"mutability":"mutable","name":"value","nameLocation":"1242:5:3","nodeType":"VariableDeclaration","scope":844,"src":"1234:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":838,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1221:27:3"},"returnParameters":{"id":843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":842,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":844,"src":"1267:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":841,"name":"bool","nodeType":"ElementaryTypeName","src":"1267:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1266:6:3"},"scope":877,"src":"1204:69:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":845,"nodeType":"StructuredDocumentation","src":"1279:264:3","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":854,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1557:9:3","nodeType":"FunctionDefinition","parameters":{"id":850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":847,"mutability":"mutable","name":"owner","nameLocation":"1575:5:3","nodeType":"VariableDeclaration","scope":854,"src":"1567:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":846,"name":"address","nodeType":"ElementaryTypeName","src":"1567:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":849,"mutability":"mutable","name":"spender","nameLocation":"1590:7:3","nodeType":"VariableDeclaration","scope":854,"src":"1582:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":848,"name":"address","nodeType":"ElementaryTypeName","src":"1582:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1566:32:3"},"returnParameters":{"id":853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":852,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":854,"src":"1622:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":851,"name":"uint256","nodeType":"ElementaryTypeName","src":"1622:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1621:9:3"},"scope":877,"src":"1548:83:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":855,"nodeType":"StructuredDocumentation","src":"1637:667:3","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n 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":864,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2318:7:3","nodeType":"FunctionDefinition","parameters":{"id":860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":857,"mutability":"mutable","name":"spender","nameLocation":"2334:7:3","nodeType":"VariableDeclaration","scope":864,"src":"2326:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":856,"name":"address","nodeType":"ElementaryTypeName","src":"2326:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":859,"mutability":"mutable","name":"value","nameLocation":"2351:5:3","nodeType":"VariableDeclaration","scope":864,"src":"2343:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":858,"name":"uint256","nodeType":"ElementaryTypeName","src":"2343:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2325:32:3"},"returnParameters":{"id":863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":862,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":864,"src":"2376:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":861,"name":"bool","nodeType":"ElementaryTypeName","src":"2376:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2375:6:3"},"scope":877,"src":"2309:73:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":865,"nodeType":"StructuredDocumentation","src":"2388:297:3","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` 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":876,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2699:12:3","nodeType":"FunctionDefinition","parameters":{"id":872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":867,"mutability":"mutable","name":"from","nameLocation":"2720:4:3","nodeType":"VariableDeclaration","scope":876,"src":"2712:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":866,"name":"address","nodeType":"ElementaryTypeName","src":"2712:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":869,"mutability":"mutable","name":"to","nameLocation":"2734:2:3","nodeType":"VariableDeclaration","scope":876,"src":"2726:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":868,"name":"address","nodeType":"ElementaryTypeName","src":"2726:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":871,"mutability":"mutable","name":"value","nameLocation":"2746:5:3","nodeType":"VariableDeclaration","scope":876,"src":"2738:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":870,"name":"uint256","nodeType":"ElementaryTypeName","src":"2738:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2711:41:3"},"returnParameters":{"id":875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":874,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":876,"src":"2771:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":873,"name":"bool","nodeType":"ElementaryTypeName","src":"2771:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2770:6:3"},"scope":877,"src":"2690:87:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":878,"src":"204:2575:3","usedErrors":[],"usedEvents":[811,820]}],"src":"106:2674:3"},"id":3},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[877],"IERC20Metadata":[903]},"id":904,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":879,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:4"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":881,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":904,"sourceUnit":878,"src":"151:37:4","symbolAliases":[{"foreign":{"id":880,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":877,"src":"159:6:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":883,"name":"IERC20","nameLocations":["306:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":877,"src":"306:6:4"},"id":884,"nodeType":"InheritanceSpecifier","src":"306:6:4"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":882,"nodeType":"StructuredDocumentation","src":"190:87:4","text":" @dev Interface for the optional metadata functions from the ERC-20 standard."},"fullyImplemented":false,"id":903,"linearizedBaseContracts":[903,877],"name":"IERC20Metadata","nameLocation":"288:14:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":885,"nodeType":"StructuredDocumentation","src":"319:54:4","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":890,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"387:4:4","nodeType":"FunctionDefinition","parameters":{"id":886,"nodeType":"ParameterList","parameters":[],"src":"391:2:4"},"returnParameters":{"id":889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":888,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":890,"src":"417:13:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":887,"name":"string","nodeType":"ElementaryTypeName","src":"417:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"416:15:4"},"scope":903,"src":"378:54:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":891,"nodeType":"StructuredDocumentation","src":"438:56:4","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":896,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"508:6:4","nodeType":"FunctionDefinition","parameters":{"id":892,"nodeType":"ParameterList","parameters":[],"src":"514:2:4"},"returnParameters":{"id":895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":894,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":896,"src":"540:13:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":893,"name":"string","nodeType":"ElementaryTypeName","src":"540:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"539:15:4"},"scope":903,"src":"499:56:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":897,"nodeType":"StructuredDocumentation","src":"561:65:4","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":902,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"640:8:4","nodeType":"FunctionDefinition","parameters":{"id":898,"nodeType":"ParameterList","parameters":[],"src":"648:2:4"},"returnParameters":{"id":901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":900,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":902,"src":"674:5:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":899,"name":"uint8","nodeType":"ElementaryTypeName","src":"674:5:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"673:7:4"},"scope":903,"src":"631:50:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":904,"src":"278:405:4","usedErrors":[],"usedEvents":[811,820]}],"src":"125:559:4"},"id":4},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[933]},"id":934,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":905,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:5"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":906,"nodeType":"StructuredDocumentation","src":"127:496:5","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":933,"linearizedBaseContracts":[933],"name":"Context","nameLocation":"642:7:5","nodeType":"ContractDefinition","nodes":[{"body":{"id":914,"nodeType":"Block","src":"718:34:5","statements":[{"expression":{"expression":{"id":911,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"735:3:5","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"739:6:5","memberName":"sender","nodeType":"MemberAccess","src":"735:10:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":910,"id":913,"nodeType":"Return","src":"728:17:5"}]},"id":915,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"665:10:5","nodeType":"FunctionDefinition","parameters":{"id":907,"nodeType":"ParameterList","parameters":[],"src":"675:2:5"},"returnParameters":{"id":910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":909,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":915,"src":"709:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":908,"name":"address","nodeType":"ElementaryTypeName","src":"709:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"708:9:5"},"scope":933,"src":"656:96:5","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":923,"nodeType":"Block","src":"825:32:5","statements":[{"expression":{"expression":{"id":920,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"842:3:5","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"846:4:5","memberName":"data","nodeType":"MemberAccess","src":"842:8:5","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":919,"id":922,"nodeType":"Return","src":"835:15:5"}]},"id":924,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"767:8:5","nodeType":"FunctionDefinition","parameters":{"id":916,"nodeType":"ParameterList","parameters":[],"src":"775:2:5"},"returnParameters":{"id":919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":918,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":924,"src":"809:14:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":917,"name":"bytes","nodeType":"ElementaryTypeName","src":"809:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"808:16:5"},"scope":933,"src":"758:99:5","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":931,"nodeType":"Block","src":"935:25:5","statements":[{"expression":{"hexValue":"30","id":929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"952:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":928,"id":930,"nodeType":"Return","src":"945:8:5"}]},"id":932,"implemented":true,"kind":"function","modifiers":[],"name":"_contextSuffixLength","nameLocation":"872:20:5","nodeType":"FunctionDefinition","parameters":{"id":925,"nodeType":"ParameterList","parameters":[],"src":"892:2:5"},"returnParameters":{"id":928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":927,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":932,"src":"926:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":926,"name":"uint256","nodeType":"ElementaryTypeName","src":"926:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"925:9:5"},"scope":933,"src":"863:97:5","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":934,"src":"624:338:5","usedErrors":[],"usedEvents":[]}],"src":"101:862:5"},"id":5},"contracts/MockERC20.sol":{"ast":{"absolutePath":"contracts/MockERC20.sol","exportedSymbols":{"Context":[933],"ERC20":[799],"IERC20":[877],"IERC20Errors":[189],"IERC20Metadata":[903],"MockERC20":[1054],"Ownable":[147]},"id":1055,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":935,"literals":["solidity","^","0.8",".19"],"nodeType":"PragmaDirective","src":"32:24:6"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","file":"@openzeppelin/contracts/token/ERC20/ERC20.sol","id":936,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1055,"sourceUnit":800,"src":"58:55:6","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":937,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1055,"sourceUnit":148,"src":"114:52:6","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":939,"name":"ERC20","nameLocations":["268:5:6"],"nodeType":"IdentifierPath","referencedDeclaration":799,"src":"268:5:6"},"id":940,"nodeType":"InheritanceSpecifier","src":"268:5:6"},{"baseName":{"id":941,"name":"Ownable","nameLocations":["275:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":147,"src":"275:7:6"},"id":942,"nodeType":"InheritanceSpecifier","src":"275:7:6"}],"canonicalName":"MockERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":938,"nodeType":"StructuredDocumentation","src":"168:77:6","text":" @title MockERC20\n @dev Test ERC20 token for VideoPayment testing"},"fullyImplemented":true,"id":1054,"linearizedBaseContracts":[1054,147,799,189,903,877,933],"name":"MockERC20","nameLocation":"255:9:6","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":944,"mutability":"mutable","name":"_decimals","nameLocation":"303:9:6","nodeType":"VariableDeclaration","scope":1054,"src":"289:23:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":943,"name":"uint8","nodeType":"ElementaryTypeName","src":"289:5:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"body":{"id":966,"nodeType":"Block","src":"492:38:6","statements":[{"expression":{"id":964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":962,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":944,"src":"502:9:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":963,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":950,"src":"514:9:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"502:21:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":965,"nodeType":"ExpressionStatement","src":"502:21:6"}]},"id":967,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":955,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":946,"src":"456:4:6","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":956,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"462:6:6","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":957,"kind":"baseConstructorSpecifier","modifierName":{"id":954,"name":"ERC20","nameLocations":["450:5:6"],"nodeType":"IdentifierPath","referencedDeclaration":799,"src":"450:5:6"},"nodeType":"ModifierInvocation","src":"450:19:6"},{"arguments":[{"id":959,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":952,"src":"478:12:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":960,"kind":"baseConstructorSpecifier","modifierName":{"id":958,"name":"Ownable","nameLocations":["470:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":147,"src":"470:7:6"},"nodeType":"ModifierInvocation","src":"470:21:6"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":946,"mutability":"mutable","name":"name","nameLocation":"354:4:6","nodeType":"VariableDeclaration","scope":967,"src":"340:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":945,"name":"string","nodeType":"ElementaryTypeName","src":"340:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":948,"mutability":"mutable","name":"symbol","nameLocation":"382:6:6","nodeType":"VariableDeclaration","scope":967,"src":"368:20:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":947,"name":"string","nodeType":"ElementaryTypeName","src":"368:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":950,"mutability":"mutable","name":"decimals_","nameLocation":"404:9:6","nodeType":"VariableDeclaration","scope":967,"src":"398:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":949,"name":"uint8","nodeType":"ElementaryTypeName","src":"398:5:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":952,"mutability":"mutable","name":"initialOwner","nameLocation":"431:12:6","nodeType":"VariableDeclaration","scope":967,"src":"423:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":951,"name":"address","nodeType":"ElementaryTypeName","src":"423:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"330:119:6"},"returnParameters":{"id":961,"nodeType":"ParameterList","parameters":[],"src":"492:0:6"},"scope":1054,"src":"319:211:6","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[363],"body":{"id":976,"nodeType":"Block","src":"697:33:6","statements":[{"expression":{"id":974,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":944,"src":"714:9:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":973,"id":975,"nodeType":"Return","src":"707:16:6"}]},"documentation":{"id":968,"nodeType":"StructuredDocumentation","src":"536:91:6","text":" @dev Returns the number of decimals used to get its user representation."},"functionSelector":"313ce567","id":977,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"641:8:6","nodeType":"FunctionDefinition","overrides":{"id":970,"nodeType":"OverrideSpecifier","overrides":[],"src":"672:8:6"},"parameters":{"id":969,"nodeType":"ParameterList","parameters":[],"src":"649:2:6"},"returnParameters":{"id":973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":977,"src":"690:5:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":971,"name":"uint8","nodeType":"ElementaryTypeName","src":"690:5:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"689:7:6"},"scope":1054,"src":"632:98:6","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":992,"nodeType":"Block","src":"947:34:6","statements":[{"expression":{"arguments":[{"id":988,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":980,"src":"963:2:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":989,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":982,"src":"967:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":987,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":639,"src":"957:5:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"957:17:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":991,"nodeType":"ExpressionStatement","src":"957:17:6"}]},"documentation":{"id":978,"nodeType":"StructuredDocumentation","src":"736:145:6","text":" @dev Mint tokens to specified address\n @param to Address to mint tokens to\n @param amount Amount of tokens to mint"},"functionSelector":"40c10f19","id":993,"implemented":true,"kind":"function","modifiers":[{"id":985,"kind":"modifierInvocation","modifierName":{"id":984,"name":"onlyOwner","nameLocations":["937:9:6"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"937:9:6"},"nodeType":"ModifierInvocation","src":"937:9:6"}],"name":"mint","nameLocation":"895:4:6","nodeType":"FunctionDefinition","parameters":{"id":983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":980,"mutability":"mutable","name":"to","nameLocation":"908:2:6","nodeType":"VariableDeclaration","scope":993,"src":"900:10:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":979,"name":"address","nodeType":"ElementaryTypeName","src":"900:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":982,"mutability":"mutable","name":"amount","nameLocation":"920:6:6","nodeType":"VariableDeclaration","scope":993,"src":"912:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":981,"name":"uint256","nodeType":"ElementaryTypeName","src":"912:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"899:28:6"},"returnParameters":{"id":986,"nodeType":"ParameterList","parameters":[],"src":"947:0:6"},"scope":1054,"src":"886:95:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1008,"nodeType":"Block","src":"1206:36:6","statements":[{"expression":{"arguments":[{"id":1004,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":996,"src":"1222:4:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1005,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":998,"src":"1228:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1003,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":672,"src":"1216:5:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":1006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1216:19:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1007,"nodeType":"ExpressionStatement","src":"1216:19:6"}]},"documentation":{"id":994,"nodeType":"StructuredDocumentation","src":"987:151:6","text":" @dev Burn tokens from specified address\n @param from Address to burn tokens from\n @param amount Amount of tokens to burn"},"functionSelector":"9dc29fac","id":1009,"implemented":true,"kind":"function","modifiers":[{"id":1001,"kind":"modifierInvocation","modifierName":{"id":1000,"name":"onlyOwner","nameLocations":["1196:9:6"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"1196:9:6"},"nodeType":"ModifierInvocation","src":"1196:9:6"}],"name":"burn","nameLocation":"1152:4:6","nodeType":"FunctionDefinition","parameters":{"id":999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":996,"mutability":"mutable","name":"from","nameLocation":"1165:4:6","nodeType":"VariableDeclaration","scope":1009,"src":"1157:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":995,"name":"address","nodeType":"ElementaryTypeName","src":"1157:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":998,"mutability":"mutable","name":"amount","nameLocation":"1179:6:6","nodeType":"VariableDeclaration","scope":1009,"src":"1171:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":997,"name":"uint256","nodeType":"ElementaryTypeName","src":"1171:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1156:30:6"},"returnParameters":{"id":1002,"nodeType":"ParameterList","parameters":[],"src":"1206:0:6"},"scope":1054,"src":"1143:99:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1052,"nodeType":"Block","src":"1540:202:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1022,"name":"recipients","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1013,"src":"1558:10:6","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1569:6:6","memberName":"length","nodeType":"MemberAccess","src":"1558:17:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":1024,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1016,"src":"1579:7:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":1025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1587:6:6","memberName":"length","nodeType":"MemberAccess","src":"1579:14:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1558:35:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"417272617973206c656e677468206d69736d61746368","id":1027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1595:24:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_582fd48f3876d7686bfeaaaa0db0589073271dedd50d66094f02fee2a3d2e01c","typeString":"literal_string \"Arrays length mismatch\""},"value":"Arrays length mismatch"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_582fd48f3876d7686bfeaaaa0db0589073271dedd50d66094f02fee2a3d2e01c","typeString":"literal_string \"Arrays length mismatch\""}],"id":1021,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1550:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1550:70:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1029,"nodeType":"ExpressionStatement","src":"1550:70:6"},{"body":{"id":1050,"nodeType":"Block","src":"1679:57:6","statements":[{"expression":{"arguments":[{"baseExpression":{"id":1042,"name":"recipients","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1013,"src":"1699:10:6","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1044,"indexExpression":{"id":1043,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1031,"src":"1710:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1699:13:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":1045,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1016,"src":"1714:7:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":1047,"indexExpression":{"id":1046,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1031,"src":"1722:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1714:10:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1041,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":639,"src":"1693:5:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":1048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1693:32:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1049,"nodeType":"ExpressionStatement","src":"1693:32:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1034,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1031,"src":"1651:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":1035,"name":"recipients","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1013,"src":"1655:10:6","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1666:6:6","memberName":"length","nodeType":"MemberAccess","src":"1655:17:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1651:21:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1051,"initializationExpression":{"assignments":[1031],"declarations":[{"constant":false,"id":1031,"mutability":"mutable","name":"i","nameLocation":"1644:1:6","nodeType":"VariableDeclaration","scope":1051,"src":"1636:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1030,"name":"uint256","nodeType":"ElementaryTypeName","src":"1636:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1033,"initialValue":{"hexValue":"30","id":1032,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1648:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1636:13:6"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":1039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1674:3:6","subExpression":{"id":1038,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1031,"src":"1674:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1040,"nodeType":"ExpressionStatement","src":"1674:3:6"},"nodeType":"ForStatement","src":"1631:105:6"}]},"documentation":{"id":1010,"nodeType":"StructuredDocumentation","src":"1248:172:6","text":" @dev Batch mint tokens to multiple addresses\n @param recipients Array of addresses to mint tokens to\n @param amounts Array of amounts to mint"},"functionSelector":"68573107","id":1053,"implemented":true,"kind":"function","modifiers":[{"id":1019,"kind":"modifierInvocation","modifierName":{"id":1018,"name":"onlyOwner","nameLocations":["1530:9:6"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"1530:9:6"},"nodeType":"ModifierInvocation","src":"1530:9:6"}],"name":"batchMint","nameLocation":"1434:9:6","nodeType":"FunctionDefinition","parameters":{"id":1017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1013,"mutability":"mutable","name":"recipients","nameLocation":"1470:10:6","nodeType":"VariableDeclaration","scope":1053,"src":"1453:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1011,"name":"address","nodeType":"ElementaryTypeName","src":"1453:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1012,"nodeType":"ArrayTypeName","src":"1453:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1016,"mutability":"mutable","name":"amounts","nameLocation":"1507:7:6","nodeType":"VariableDeclaration","scope":1053,"src":"1490:24:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1014,"name":"uint256","nodeType":"ElementaryTypeName","src":"1490:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1015,"nodeType":"ArrayTypeName","src":"1490:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1443:77:6"},"returnParameters":{"id":1020,"nodeType":"ParameterList","parameters":[],"src":"1540:0:6"},"scope":1054,"src":"1425:317:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1055,"src":"246:1498:6","usedErrors":[13,18,159,164,169,178,183,188],"usedEvents":[24,811,820]}],"src":"32:1713:6"},"id":6}},"contracts":{"@openzeppelin/contracts/access/Ownable.sol":{"Ownable":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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. The initial owner is set to the address provided by the deployer. 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.","errors":{"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"kind":"dev","methods":{"constructor":{"details":"Initializes the contract setting the address provided by 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. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"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. The initial owner is set to the address provided by the deployer. 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.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by 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. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    /**\\n     * @dev The caller account is not authorized to perform an operation.\\n     */\\n    error OwnableUnauthorizedAccount(address account);\\n\\n    /**\\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n     */\\n    error OwnableInvalidOwner(address owner);\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n     */\\n    constructor(address initialOwner) {\\n        if (initialOwner == address(0)) {\\n            revert OwnableInvalidOwner(address(0));\\n        }\\n        _transferOwnership(initialOwner);\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        if (owner() != _msgSender()) {\\n            revert OwnableUnauthorizedAccount(_msgSender());\\n        }\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        if (newOwner == address(0)) {\\n            revert OwnableInvalidOwner(address(0));\\n        }\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8,"contract":"@openzeppelin/contracts/access/Ownable.sol:Ownable","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"IERC1155Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC1155InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC1155InvalidApprover","type":"error"},{"inputs":[{"internalType":"uint256","name":"idsLength","type":"uint256"},{"internalType":"uint256","name":"valuesLength","type":"uint256"}],"name":"ERC1155InvalidArrayLength","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC1155InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC1155InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC1155InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC1155MissingApprovalForAll","type":"error"}],"devdoc":{"details":"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.","errors":{"ERC1155InsufficientBalance(address,uint256,uint256,uint256)":[{"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers.","params":{"balance":"Current balance for the interacting account.","needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred.","tokenId":"Identifier number of a token."}}],"ERC1155InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC1155InvalidArrayLength(uint256,uint256)":[{"details":"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.","params":{"idsLength":"Length of the array of token identifiers","valuesLength":"Length of the array of token amounts"}}],"ERC1155InvalidOperator(address)":[{"details":"Indicates a failure with the `operator` to be approved. Used in approvals.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC1155InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC1155InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC1155MissingApprovalForAll(address,address)":[{"details":"Indicates a failure with the `operator`’s approval. Used in transfers.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner.","owner":"Address of the current owner of a token."}}]},"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.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n    /**\\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param balance Current balance for the interacting account.\\n     * @param needed Minimum amount required to perform a transfer.\\n     */\\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC20InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC20InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n     * @param needed Minimum amount required to perform a transfer.\\n     */\\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC20InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n    /**\\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n     * Used in balance queries.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC721InvalidOwner(address owner);\\n\\n    /**\\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC721NonexistentToken(uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param tokenId Identifier number of a token.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC721InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC721InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC721InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n    /**\\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param balance Current balance for the interacting account.\\n     * @param needed Minimum amount required to perform a transfer.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC1155InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC1155InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC1155InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC1155InvalidOperator(address operator);\\n\\n    /**\\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n     * Used in batch transfers.\\n     * @param idsLength Length of the array of token identifiers\\n     * @param valuesLength Length of the array of token amounts\\n     */\\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"IERC20Errors":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"}],"devdoc":{"details":"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.","errors":{"ERC20InsufficientAllowance(address,uint256,uint256)":[{"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers.","params":{"allowance":"Amount of tokens a `spender` is allowed to operate with.","needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers.","params":{"balance":"Current balance for the interacting account.","needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred."}}],"ERC20InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC20InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC20InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC20InvalidSpender(address)":[{"details":"Indicates a failure with the `spender` to be approved. Used in approvals.","params":{"spender":"Address that may be allowed to operate on tokens without being their owner."}}]},"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.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n    /**\\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param balance Current balance for the interacting account.\\n     * @param needed Minimum amount required to perform a transfer.\\n     */\\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC20InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC20InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n     * @param needed Minimum amount required to perform a transfer.\\n     */\\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC20InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n    /**\\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n     * Used in balance queries.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC721InvalidOwner(address owner);\\n\\n    /**\\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC721NonexistentToken(uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param tokenId Identifier number of a token.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC721InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC721InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC721InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n    /**\\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param balance Current balance for the interacting account.\\n     * @param needed Minimum amount required to perform a transfer.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC1155InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC1155InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC1155InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC1155InvalidOperator(address operator);\\n\\n    /**\\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n     * Used in batch transfers.\\n     * @param idsLength Length of the array of token identifiers\\n     * @param valuesLength Length of the array of token amounts\\n     */\\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"IERC721Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"}],"devdoc":{"details":"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.","errors":{"ERC721IncorrectOwner(address,uint256,address)":[{"details":"Indicates an error related to the ownership over a particular token. Used in transfers.","params":{"owner":"Address of the current owner of a token.","sender":"Address whose tokens are being transferred.","tokenId":"Identifier number of a token."}}],"ERC721InsufficientApproval(address,uint256)":[{"details":"Indicates a failure with the `operator`’s approval. Used in transfers.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner.","tokenId":"Identifier number of a token."}}],"ERC721InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC721InvalidOperator(address)":[{"details":"Indicates a failure with the `operator` to be approved. Used in approvals.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC721InvalidOwner(address)":[{"details":"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.","params":{"owner":"Address of the current owner of a token."}}],"ERC721InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC721InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC721NonexistentToken(uint256)":[{"details":"Indicates a `tokenId` whose `owner` is the zero address.","params":{"tokenId":"Identifier number of a token."}}]},"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.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n    /**\\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param balance Current balance for the interacting account.\\n     * @param needed Minimum amount required to perform a transfer.\\n     */\\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC20InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC20InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n     * @param needed Minimum amount required to perform a transfer.\\n     */\\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC20InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n    /**\\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n     * Used in balance queries.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC721InvalidOwner(address owner);\\n\\n    /**\\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC721NonexistentToken(uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param tokenId Identifier number of a token.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC721InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC721InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC721InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n    /**\\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param balance Current balance for the interacting account.\\n     * @param needed Minimum amount required to perform a transfer.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC1155InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC1155InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC1155InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC1155InvalidOperator(address operator);\\n\\n    /**\\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n     * Used in batch transfers.\\n     * @param idsLength Length of the array of token identifiers\\n     * @param valuesLength Length of the array of token amounts\\n     */\\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC-20 applications.","errors":{"ERC20InsufficientAllowance(address,uint256,uint256)":[{"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers.","params":{"allowance":"Amount of tokens a `spender` is allowed to operate with.","needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers.","params":{"balance":"Current balance for the interacting account.","needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred."}}],"ERC20InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC20InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC20InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC20InvalidSpender(address)":[{"details":"Indicates a failure with the `spender` to be approved. Used in approvals.","params":{"spender":"Address that may be allowed to operate on tokens without being their owner."}}]},"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":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"constructor":{"details":"Sets the values for {name} and {symbol}. Both 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 default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"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.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"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}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC-20 applications.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"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\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. Both 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 default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n    /**\\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param balance Current balance for the interacting account.\\n     * @param needed Minimum amount required to perform a transfer.\\n     */\\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC20InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC20InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n     * @param needed Minimum amount required to perform a transfer.\\n     */\\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC20InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n    /**\\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n     * Used in balance queries.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC721InvalidOwner(address owner);\\n\\n    /**\\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC721NonexistentToken(uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param tokenId Identifier number of a token.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC721InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC721InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC721InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n    /**\\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param balance Current balance for the interacting account.\\n     * @param needed Minimum amount required to perform a transfer.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC1155InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC1155InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC1155InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC1155InvalidOperator(address operator);\\n\\n    /**\\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n     * Used in batch transfers.\\n     * @param idsLength Length of the array of token identifiers\\n     * @param valuesLength Length of the array of token amounts\\n     */\\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"./extensions/IERC20Metadata.sol\\\";\\nimport {Context} from \\\"../../utils/Context.sol\\\";\\nimport {IERC20Errors} from \\\"../../interfaces/draft-IERC6093.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 *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC-20\\n * applications.\\n */\\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\\n    mapping(address account => uint256) private _balances;\\n\\n    mapping(address account => mapping(address spender => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * Both values are immutable: they can only be set once during construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual 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 default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `value`.\\n     */\\n    function transfer(address to, uint256 value) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, value);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 value) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, value);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Skips emitting an {Approval} event indicating an allowance update. This is not\\n     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `value`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `value`.\\n     */\\n    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, value);\\n        _transfer(from, to, value);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\\n     */\\n    function _transfer(address from, address to, uint256 value) internal {\\n        if (from == address(0)) {\\n            revert ERC20InvalidSender(address(0));\\n        }\\n        if (to == address(0)) {\\n            revert ERC20InvalidReceiver(address(0));\\n        }\\n        _update(from, to, value);\\n    }\\n\\n    /**\\n     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\\n     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\\n     * this function.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function _update(address from, address to, uint256 value) internal virtual {\\n        if (from == address(0)) {\\n            // Overflow check required: The rest of the code assumes that totalSupply never overflows\\n            _totalSupply += value;\\n        } else {\\n            uint256 fromBalance = _balances[from];\\n            if (fromBalance < value) {\\n                revert ERC20InsufficientBalance(from, fromBalance, value);\\n            }\\n            unchecked {\\n                // Overflow not possible: value <= fromBalance <= totalSupply.\\n                _balances[from] = fromBalance - value;\\n            }\\n        }\\n\\n        if (to == address(0)) {\\n            unchecked {\\n                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\\n                _totalSupply -= value;\\n            }\\n        } else {\\n            unchecked {\\n                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\\n                _balances[to] += value;\\n            }\\n        }\\n\\n        emit Transfer(from, to, value);\\n    }\\n\\n    /**\\n     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\\n     * Relies on the `_update` mechanism\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\\n     */\\n    function _mint(address account, uint256 value) internal {\\n        if (account == address(0)) {\\n            revert ERC20InvalidReceiver(address(0));\\n        }\\n        _update(address(0), account, value);\\n    }\\n\\n    /**\\n     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\\n     * Relies on the `_update` mechanism.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * NOTE: This function is not virtual, {_update} should be overridden instead\\n     */\\n    function _burn(address account, uint256 value) internal {\\n        if (account == address(0)) {\\n            revert ERC20InvalidSender(address(0));\\n        }\\n        _update(account, address(0), value);\\n    }\\n\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     *\\n     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\\n     */\\n    function _approve(address owner, address spender, uint256 value) internal {\\n        _approve(owner, spender, value, true);\\n    }\\n\\n    /**\\n     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\\n     *\\n     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\\n     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\\n     * `Approval` event during `transferFrom` operations.\\n     *\\n     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\\n     * true using the following override:\\n     *\\n     * ```solidity\\n     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\\n     *     super._approve(owner, spender, value, true);\\n     * }\\n     * ```\\n     *\\n     * Requirements are the same as {_approve}.\\n     */\\n    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\\n        if (owner == address(0)) {\\n            revert ERC20InvalidApprover(address(0));\\n        }\\n        if (spender == address(0)) {\\n            revert ERC20InvalidSpender(address(0));\\n        }\\n        _allowances[owner][spender] = value;\\n        if (emitEvent) {\\n            emit Approval(owner, spender, value);\\n        }\\n    }\\n\\n    /**\\n     * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\\n     *\\n     * Does not update the allowance value in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Does not emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance < type(uint256).max) {\\n            if (currentAllowance < value) {\\n                revert ERC20InsufficientAllowance(spender, currentAllowance, value);\\n            }\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - value, false);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x41f6b3b9e030561e7896dbef372b499cc8d418a80c3884a4d65a68f2fdc7493a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the value of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the value of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 value) 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 a `value` amount of tokens as the allowance of `spender` over the\\n     * 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 value) external returns (bool);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n     * allowance mechanism. `value` 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 from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":307,"contract":"@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":313,"contract":"@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":315,"contract":"@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":317,"contract":"@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":319,"contract":"@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"}],"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"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface of the ERC-20 standard as defined in the ERC.","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 a `value` amount of tokens 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 value of tokens owned by `account`."},"totalSupply()":{"details":"Returns the value of tokens in existence."},"transfer(address,uint256)":{"details":"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` 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.28+commit.7893614a\"},\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"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 a `value` amount of tokens 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 value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the value of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the value of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 value) 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 a `value` amount of tokens as the allowance of `spender` over the\\n     * 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 value) external returns (bool);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n     * allowance mechanism. `value` 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 from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface for the optional metadata functions from the ERC-20 standard.","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 a `value` amount of tokens 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 value of tokens owned by `account`."},"decimals()":{"details":"Returns the decimals places of the token."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token."},"totalSupply()":{"details":"Returns the value of tokens in existence."},"transfer(address,uint256)":{"details":"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` 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.28+commit.7893614a\"},\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC-20 standard.\",\"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 a `value` amount of tokens 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 value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the value of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the value of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 value) 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 a `value` amount of tokens as the allowance of `spender` over the\\n     * 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 value) external returns (bool);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n     * allowance mechanism. `value` 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 from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"devdoc":{"details":"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/MockERC20.sol":{"MockERC20":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":[{"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":"value","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":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"Test ERC20 token for VideoPayment testing","errors":{"ERC20InsufficientAllowance(address,uint256,uint256)":[{"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers.","params":{"allowance":"Amount of tokens a `spender` is allowed to operate with.","needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers.","params":{"balance":"Current balance for the interacting account.","needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred."}}],"ERC20InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC20InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC20InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC20InvalidSpender(address)":[{"details":"Indicates a failure with the `spender` to be approved. Used in approvals.","params":{"spender":"Address that may be allowed to operate on tokens without being their owner."}}],"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"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":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"batchMint(address[],uint256[])":{"details":"Batch mint tokens to multiple addresses","params":{"amounts":"Array of amounts to mint","recipients":"Array of addresses to mint tokens to"}},"burn(address,uint256)":{"details":"Burn tokens from specified address","params":{"amount":"Amount of tokens to burn","from":"Address to burn tokens from"}},"decimals()":{"details":"Returns the number of decimals used to get its user representation."},"mint(address,uint256)":{"details":"Mint tokens to specified address","params":{"amount":"Amount of tokens to mint","to":"Address to mint tokens to"}},"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"MockERC20","version":1},"evm":{"bytecode":{"functionDebugData":{"@_336":{"entryPoint":null,"id":336,"parameterSlots":2,"returnSlots":0},"@_50":{"entryPoint":null,"id":50,"parameterSlots":1,"returnSlots":0},"@_967":{"entryPoint":null,"id":967,"parameterSlots":4,"returnSlots":0},"@_transferOwnership_146":{"entryPoint":173,"id":146,"parameterSlots":1,"returnSlots":0},"abi_decode_string_fromMemory":{"entryPoint":277,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8t_address_fromMemory":{"entryPoint":440,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"clean_up_bytearray_end_slots_string_storage":{"entryPoint":659,"id":null,"parameterSlots":3,"returnSlots":0},"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage":{"entryPoint":738,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":601,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x41":{"entryPoint":255,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:4587:7","nodeType":"YulBlock","src":"0:4587:7","statements":[{"nativeSrc":"6:3:7","nodeType":"YulBlock","src":"6:3:7","statements":[]},{"body":{"nativeSrc":"46:95:7","nodeType":"YulBlock","src":"46:95:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"63:1:7","nodeType":"YulLiteral","src":"63:1:7","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"70:3:7","nodeType":"YulLiteral","src":"70:3:7","type":"","value":"224"},{"kind":"number","nativeSrc":"75:10:7","nodeType":"YulLiteral","src":"75:10:7","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"66:3:7","nodeType":"YulIdentifier","src":"66:3:7"},"nativeSrc":"66:20:7","nodeType":"YulFunctionCall","src":"66:20:7"}],"functionName":{"name":"mstore","nativeSrc":"56:6:7","nodeType":"YulIdentifier","src":"56:6:7"},"nativeSrc":"56:31:7","nodeType":"YulFunctionCall","src":"56:31:7"},"nativeSrc":"56:31:7","nodeType":"YulExpressionStatement","src":"56:31:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"103:1:7","nodeType":"YulLiteral","src":"103:1:7","type":"","value":"4"},{"kind":"number","nativeSrc":"106:4:7","nodeType":"YulLiteral","src":"106:4:7","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"96:6:7","nodeType":"YulIdentifier","src":"96:6:7"},"nativeSrc":"96:15:7","nodeType":"YulFunctionCall","src":"96:15:7"},"nativeSrc":"96:15:7","nodeType":"YulExpressionStatement","src":"96:15:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"127:1:7","nodeType":"YulLiteral","src":"127:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"130:4:7","nodeType":"YulLiteral","src":"130:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"120:6:7","nodeType":"YulIdentifier","src":"120:6:7"},"nativeSrc":"120:15:7","nodeType":"YulFunctionCall","src":"120:15:7"},"nativeSrc":"120:15:7","nodeType":"YulExpressionStatement","src":"120:15:7"}]},"name":"panic_error_0x41","nativeSrc":"14:127:7","nodeType":"YulFunctionDefinition","src":"14:127:7"},{"body":{"nativeSrc":"210:770:7","nodeType":"YulBlock","src":"210:770:7","statements":[{"body":{"nativeSrc":"259:16:7","nodeType":"YulBlock","src":"259:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"268:1:7","nodeType":"YulLiteral","src":"268:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"271:1:7","nodeType":"YulLiteral","src":"271:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"261:6:7","nodeType":"YulIdentifier","src":"261:6:7"},"nativeSrc":"261:12:7","nodeType":"YulFunctionCall","src":"261:12:7"},"nativeSrc":"261:12:7","nodeType":"YulExpressionStatement","src":"261:12:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"238:6:7","nodeType":"YulIdentifier","src":"238:6:7"},{"kind":"number","nativeSrc":"246:4:7","nodeType":"YulLiteral","src":"246:4:7","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"234:3:7","nodeType":"YulIdentifier","src":"234:3:7"},"nativeSrc":"234:17:7","nodeType":"YulFunctionCall","src":"234:17:7"},{"name":"end","nativeSrc":"253:3:7","nodeType":"YulIdentifier","src":"253:3:7"}],"functionName":{"name":"slt","nativeSrc":"230:3:7","nodeType":"YulIdentifier","src":"230:3:7"},"nativeSrc":"230:27:7","nodeType":"YulFunctionCall","src":"230:27:7"}],"functionName":{"name":"iszero","nativeSrc":"223:6:7","nodeType":"YulIdentifier","src":"223:6:7"},"nativeSrc":"223:35:7","nodeType":"YulFunctionCall","src":"223:35:7"},"nativeSrc":"220:55:7","nodeType":"YulIf","src":"220:55:7"},{"nativeSrc":"284:27:7","nodeType":"YulVariableDeclaration","src":"284:27:7","value":{"arguments":[{"name":"offset","nativeSrc":"304:6:7","nodeType":"YulIdentifier","src":"304:6:7"}],"functionName":{"name":"mload","nativeSrc":"298:5:7","nodeType":"YulIdentifier","src":"298:5:7"},"nativeSrc":"298:13:7","nodeType":"YulFunctionCall","src":"298:13:7"},"variables":[{"name":"length","nativeSrc":"288:6:7","nodeType":"YulTypedName","src":"288:6:7","type":""}]},{"body":{"nativeSrc":"354:22:7","nodeType":"YulBlock","src":"354:22:7","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"356:16:7","nodeType":"YulIdentifier","src":"356:16:7"},"nativeSrc":"356:18:7","nodeType":"YulFunctionCall","src":"356:18:7"},"nativeSrc":"356:18:7","nodeType":"YulExpressionStatement","src":"356:18:7"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"326:6:7","nodeType":"YulIdentifier","src":"326:6:7"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"342:2:7","nodeType":"YulLiteral","src":"342:2:7","type":"","value":"64"},{"kind":"number","nativeSrc":"346:1:7","nodeType":"YulLiteral","src":"346:1:7","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"338:3:7","nodeType":"YulIdentifier","src":"338:3:7"},"nativeSrc":"338:10:7","nodeType":"YulFunctionCall","src":"338:10:7"},{"kind":"number","nativeSrc":"350:1:7","nodeType":"YulLiteral","src":"350:1:7","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"334:3:7","nodeType":"YulIdentifier","src":"334:3:7"},"nativeSrc":"334:18:7","nodeType":"YulFunctionCall","src":"334:18:7"}],"functionName":{"name":"gt","nativeSrc":"323:2:7","nodeType":"YulIdentifier","src":"323:2:7"},"nativeSrc":"323:30:7","nodeType":"YulFunctionCall","src":"323:30:7"},"nativeSrc":"320:56:7","nodeType":"YulIf","src":"320:56:7"},{"nativeSrc":"385:23:7","nodeType":"YulVariableDeclaration","src":"385:23:7","value":{"arguments":[{"kind":"number","nativeSrc":"405:2:7","nodeType":"YulLiteral","src":"405:2:7","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"399:5:7","nodeType":"YulIdentifier","src":"399:5:7"},"nativeSrc":"399:9:7","nodeType":"YulFunctionCall","src":"399:9:7"},"variables":[{"name":"memPtr","nativeSrc":"389:6:7","nodeType":"YulTypedName","src":"389:6:7","type":""}]},{"nativeSrc":"417:85:7","nodeType":"YulVariableDeclaration","src":"417:85:7","value":{"arguments":[{"name":"memPtr","nativeSrc":"439:6:7","nodeType":"YulIdentifier","src":"439:6:7"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"length","nativeSrc":"463:6:7","nodeType":"YulIdentifier","src":"463:6:7"},{"kind":"number","nativeSrc":"471:4:7","nodeType":"YulLiteral","src":"471:4:7","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"459:3:7","nodeType":"YulIdentifier","src":"459:3:7"},"nativeSrc":"459:17:7","nodeType":"YulFunctionCall","src":"459:17:7"},{"arguments":[{"kind":"number","nativeSrc":"482:2:7","nodeType":"YulLiteral","src":"482:2:7","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"478:3:7","nodeType":"YulIdentifier","src":"478:3:7"},"nativeSrc":"478:7:7","nodeType":"YulFunctionCall","src":"478:7:7"}],"functionName":{"name":"and","nativeSrc":"455:3:7","nodeType":"YulIdentifier","src":"455:3:7"},"nativeSrc":"455:31:7","nodeType":"YulFunctionCall","src":"455:31:7"},{"kind":"number","nativeSrc":"488:2:7","nodeType":"YulLiteral","src":"488:2:7","type":"","value":"63"}],"functionName":{"name":"add","nativeSrc":"451:3:7","nodeType":"YulIdentifier","src":"451:3:7"},"nativeSrc":"451:40:7","nodeType":"YulFunctionCall","src":"451:40:7"},{"arguments":[{"kind":"number","nativeSrc":"497:2:7","nodeType":"YulLiteral","src":"497:2:7","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"493:3:7","nodeType":"YulIdentifier","src":"493:3:7"},"nativeSrc":"493:7:7","nodeType":"YulFunctionCall","src":"493:7:7"}],"functionName":{"name":"and","nativeSrc":"447:3:7","nodeType":"YulIdentifier","src":"447:3:7"},"nativeSrc":"447:54:7","nodeType":"YulFunctionCall","src":"447:54:7"}],"functionName":{"name":"add","nativeSrc":"435:3:7","nodeType":"YulIdentifier","src":"435:3:7"},"nativeSrc":"435:67:7","nodeType":"YulFunctionCall","src":"435:67:7"},"variables":[{"name":"newFreePtr","nativeSrc":"421:10:7","nodeType":"YulTypedName","src":"421:10:7","type":""}]},{"body":{"nativeSrc":"577:22:7","nodeType":"YulBlock","src":"577:22:7","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"579:16:7","nodeType":"YulIdentifier","src":"579:16:7"},"nativeSrc":"579:18:7","nodeType":"YulFunctionCall","src":"579:18:7"},"nativeSrc":"579:18:7","nodeType":"YulExpressionStatement","src":"579:18:7"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"520:10:7","nodeType":"YulIdentifier","src":"520:10:7"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"540:2:7","nodeType":"YulLiteral","src":"540:2:7","type":"","value":"64"},{"kind":"number","nativeSrc":"544:1:7","nodeType":"YulLiteral","src":"544:1:7","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"536:3:7","nodeType":"YulIdentifier","src":"536:3:7"},"nativeSrc":"536:10:7","nodeType":"YulFunctionCall","src":"536:10:7"},{"kind":"number","nativeSrc":"548:1:7","nodeType":"YulLiteral","src":"548:1:7","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"532:3:7","nodeType":"YulIdentifier","src":"532:3:7"},"nativeSrc":"532:18:7","nodeType":"YulFunctionCall","src":"532:18:7"}],"functionName":{"name":"gt","nativeSrc":"517:2:7","nodeType":"YulIdentifier","src":"517:2:7"},"nativeSrc":"517:34:7","nodeType":"YulFunctionCall","src":"517:34:7"},{"arguments":[{"name":"newFreePtr","nativeSrc":"556:10:7","nodeType":"YulIdentifier","src":"556:10:7"},{"name":"memPtr","nativeSrc":"568:6:7","nodeType":"YulIdentifier","src":"568:6:7"}],"functionName":{"name":"lt","nativeSrc":"553:2:7","nodeType":"YulIdentifier","src":"553:2:7"},"nativeSrc":"553:22:7","nodeType":"YulFunctionCall","src":"553:22:7"}],"functionName":{"name":"or","nativeSrc":"514:2:7","nodeType":"YulIdentifier","src":"514:2:7"},"nativeSrc":"514:62:7","nodeType":"YulFunctionCall","src":"514:62:7"},"nativeSrc":"511:88:7","nodeType":"YulIf","src":"511:88:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"615:2:7","nodeType":"YulLiteral","src":"615:2:7","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"619:10:7","nodeType":"YulIdentifier","src":"619:10:7"}],"functionName":{"name":"mstore","nativeSrc":"608:6:7","nodeType":"YulIdentifier","src":"608:6:7"},"nativeSrc":"608:22:7","nodeType":"YulFunctionCall","src":"608:22:7"},"nativeSrc":"608:22:7","nodeType":"YulExpressionStatement","src":"608:22:7"},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"646:6:7","nodeType":"YulIdentifier","src":"646:6:7"},{"name":"length","nativeSrc":"654:6:7","nodeType":"YulIdentifier","src":"654:6:7"}],"functionName":{"name":"mstore","nativeSrc":"639:6:7","nodeType":"YulIdentifier","src":"639:6:7"},"nativeSrc":"639:22:7","nodeType":"YulFunctionCall","src":"639:22:7"},"nativeSrc":"639:22:7","nodeType":"YulExpressionStatement","src":"639:22:7"},{"body":{"nativeSrc":"713:16:7","nodeType":"YulBlock","src":"713:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"722:1:7","nodeType":"YulLiteral","src":"722:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"725:1:7","nodeType":"YulLiteral","src":"725:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"715:6:7","nodeType":"YulIdentifier","src":"715:6:7"},"nativeSrc":"715:12:7","nodeType":"YulFunctionCall","src":"715:12:7"},"nativeSrc":"715:12:7","nodeType":"YulExpressionStatement","src":"715:12:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"684:6:7","nodeType":"YulIdentifier","src":"684:6:7"},{"name":"length","nativeSrc":"692:6:7","nodeType":"YulIdentifier","src":"692:6:7"}],"functionName":{"name":"add","nativeSrc":"680:3:7","nodeType":"YulIdentifier","src":"680:3:7"},"nativeSrc":"680:19:7","nodeType":"YulFunctionCall","src":"680:19:7"},{"kind":"number","nativeSrc":"701:4:7","nodeType":"YulLiteral","src":"701:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"676:3:7","nodeType":"YulIdentifier","src":"676:3:7"},"nativeSrc":"676:30:7","nodeType":"YulFunctionCall","src":"676:30:7"},{"name":"end","nativeSrc":"708:3:7","nodeType":"YulIdentifier","src":"708:3:7"}],"functionName":{"name":"gt","nativeSrc":"673:2:7","nodeType":"YulIdentifier","src":"673:2:7"},"nativeSrc":"673:39:7","nodeType":"YulFunctionCall","src":"673:39:7"},"nativeSrc":"670:59:7","nodeType":"YulIf","src":"670:59:7"},{"nativeSrc":"738:10:7","nodeType":"YulVariableDeclaration","src":"738:10:7","value":{"kind":"number","nativeSrc":"747:1:7","nodeType":"YulLiteral","src":"747:1:7","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"742:1:7","nodeType":"YulTypedName","src":"742:1:7","type":""}]},{"body":{"nativeSrc":"809:91:7","nodeType":"YulBlock","src":"809:91:7","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"838:6:7","nodeType":"YulIdentifier","src":"838:6:7"},{"name":"i","nativeSrc":"846:1:7","nodeType":"YulIdentifier","src":"846:1:7"}],"functionName":{"name":"add","nativeSrc":"834:3:7","nodeType":"YulIdentifier","src":"834:3:7"},"nativeSrc":"834:14:7","nodeType":"YulFunctionCall","src":"834:14:7"},{"kind":"number","nativeSrc":"850:4:7","nodeType":"YulLiteral","src":"850:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"830:3:7","nodeType":"YulIdentifier","src":"830:3:7"},"nativeSrc":"830:25:7","nodeType":"YulFunctionCall","src":"830:25:7"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"871:6:7","nodeType":"YulIdentifier","src":"871:6:7"},{"name":"i","nativeSrc":"879:1:7","nodeType":"YulIdentifier","src":"879:1:7"}],"functionName":{"name":"add","nativeSrc":"867:3:7","nodeType":"YulIdentifier","src":"867:3:7"},"nativeSrc":"867:14:7","nodeType":"YulFunctionCall","src":"867:14:7"},{"kind":"number","nativeSrc":"883:4:7","nodeType":"YulLiteral","src":"883:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"863:3:7","nodeType":"YulIdentifier","src":"863:3:7"},"nativeSrc":"863:25:7","nodeType":"YulFunctionCall","src":"863:25:7"}],"functionName":{"name":"mload","nativeSrc":"857:5:7","nodeType":"YulIdentifier","src":"857:5:7"},"nativeSrc":"857:32:7","nodeType":"YulFunctionCall","src":"857:32:7"}],"functionName":{"name":"mstore","nativeSrc":"823:6:7","nodeType":"YulIdentifier","src":"823:6:7"},"nativeSrc":"823:67:7","nodeType":"YulFunctionCall","src":"823:67:7"},"nativeSrc":"823:67:7","nodeType":"YulExpressionStatement","src":"823:67:7"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"768:1:7","nodeType":"YulIdentifier","src":"768:1:7"},{"name":"length","nativeSrc":"771:6:7","nodeType":"YulIdentifier","src":"771:6:7"}],"functionName":{"name":"lt","nativeSrc":"765:2:7","nodeType":"YulIdentifier","src":"765:2:7"},"nativeSrc":"765:13:7","nodeType":"YulFunctionCall","src":"765:13:7"},"nativeSrc":"757:143:7","nodeType":"YulForLoop","post":{"nativeSrc":"779:21:7","nodeType":"YulBlock","src":"779:21:7","statements":[{"nativeSrc":"781:17:7","nodeType":"YulAssignment","src":"781:17:7","value":{"arguments":[{"name":"i","nativeSrc":"790:1:7","nodeType":"YulIdentifier","src":"790:1:7"},{"kind":"number","nativeSrc":"793:4:7","nodeType":"YulLiteral","src":"793:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"786:3:7","nodeType":"YulIdentifier","src":"786:3:7"},"nativeSrc":"786:12:7","nodeType":"YulFunctionCall","src":"786:12:7"},"variableNames":[{"name":"i","nativeSrc":"781:1:7","nodeType":"YulIdentifier","src":"781:1:7"}]}]},"pre":{"nativeSrc":"761:3:7","nodeType":"YulBlock","src":"761:3:7","statements":[]},"src":"757:143:7"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"924:6:7","nodeType":"YulIdentifier","src":"924:6:7"},{"name":"length","nativeSrc":"932:6:7","nodeType":"YulIdentifier","src":"932:6:7"}],"functionName":{"name":"add","nativeSrc":"920:3:7","nodeType":"YulIdentifier","src":"920:3:7"},"nativeSrc":"920:19:7","nodeType":"YulFunctionCall","src":"920:19:7"},{"kind":"number","nativeSrc":"941:4:7","nodeType":"YulLiteral","src":"941:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"916:3:7","nodeType":"YulIdentifier","src":"916:3:7"},"nativeSrc":"916:30:7","nodeType":"YulFunctionCall","src":"916:30:7"},{"kind":"number","nativeSrc":"948:1:7","nodeType":"YulLiteral","src":"948:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"909:6:7","nodeType":"YulIdentifier","src":"909:6:7"},"nativeSrc":"909:41:7","nodeType":"YulFunctionCall","src":"909:41:7"},"nativeSrc":"909:41:7","nodeType":"YulExpressionStatement","src":"909:41:7"},{"nativeSrc":"959:15:7","nodeType":"YulAssignment","src":"959:15:7","value":{"name":"memPtr","nativeSrc":"968:6:7","nodeType":"YulIdentifier","src":"968:6:7"},"variableNames":[{"name":"array","nativeSrc":"959:5:7","nodeType":"YulIdentifier","src":"959:5:7"}]}]},"name":"abi_decode_string_fromMemory","nativeSrc":"146:834:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"184:6:7","nodeType":"YulTypedName","src":"184:6:7","type":""},{"name":"end","nativeSrc":"192:3:7","nodeType":"YulTypedName","src":"192:3:7","type":""}],"returnVariables":[{"name":"array","nativeSrc":"200:5:7","nodeType":"YulTypedName","src":"200:5:7","type":""}],"src":"146:834:7"},{"body":{"nativeSrc":"1135:733:7","nodeType":"YulBlock","src":"1135:733:7","statements":[{"body":{"nativeSrc":"1182:16:7","nodeType":"YulBlock","src":"1182:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1191:1:7","nodeType":"YulLiteral","src":"1191:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"1194:1:7","nodeType":"YulLiteral","src":"1194:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1184:6:7","nodeType":"YulIdentifier","src":"1184:6:7"},"nativeSrc":"1184:12:7","nodeType":"YulFunctionCall","src":"1184:12:7"},"nativeSrc":"1184:12:7","nodeType":"YulExpressionStatement","src":"1184:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1156:7:7","nodeType":"YulIdentifier","src":"1156:7:7"},{"name":"headStart","nativeSrc":"1165:9:7","nodeType":"YulIdentifier","src":"1165:9:7"}],"functionName":{"name":"sub","nativeSrc":"1152:3:7","nodeType":"YulIdentifier","src":"1152:3:7"},"nativeSrc":"1152:23:7","nodeType":"YulFunctionCall","src":"1152:23:7"},{"kind":"number","nativeSrc":"1177:3:7","nodeType":"YulLiteral","src":"1177:3:7","type":"","value":"128"}],"functionName":{"name":"slt","nativeSrc":"1148:3:7","nodeType":"YulIdentifier","src":"1148:3:7"},"nativeSrc":"1148:33:7","nodeType":"YulFunctionCall","src":"1148:33:7"},"nativeSrc":"1145:53:7","nodeType":"YulIf","src":"1145:53:7"},{"nativeSrc":"1207:30:7","nodeType":"YulVariableDeclaration","src":"1207:30:7","value":{"arguments":[{"name":"headStart","nativeSrc":"1227:9:7","nodeType":"YulIdentifier","src":"1227:9:7"}],"functionName":{"name":"mload","nativeSrc":"1221:5:7","nodeType":"YulIdentifier","src":"1221:5:7"},"nativeSrc":"1221:16:7","nodeType":"YulFunctionCall","src":"1221:16:7"},"variables":[{"name":"offset","nativeSrc":"1211:6:7","nodeType":"YulTypedName","src":"1211:6:7","type":""}]},{"body":{"nativeSrc":"1280:16:7","nodeType":"YulBlock","src":"1280:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1289:1:7","nodeType":"YulLiteral","src":"1289:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"1292:1:7","nodeType":"YulLiteral","src":"1292:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1282:6:7","nodeType":"YulIdentifier","src":"1282:6:7"},"nativeSrc":"1282:12:7","nodeType":"YulFunctionCall","src":"1282:12:7"},"nativeSrc":"1282:12:7","nodeType":"YulExpressionStatement","src":"1282:12:7"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"1252:6:7","nodeType":"YulIdentifier","src":"1252:6:7"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1268:2:7","nodeType":"YulLiteral","src":"1268:2:7","type":"","value":"64"},{"kind":"number","nativeSrc":"1272:1:7","nodeType":"YulLiteral","src":"1272:1:7","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"1264:3:7","nodeType":"YulIdentifier","src":"1264:3:7"},"nativeSrc":"1264:10:7","nodeType":"YulFunctionCall","src":"1264:10:7"},{"kind":"number","nativeSrc":"1276:1:7","nodeType":"YulLiteral","src":"1276:1:7","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1260:3:7","nodeType":"YulIdentifier","src":"1260:3:7"},"nativeSrc":"1260:18:7","nodeType":"YulFunctionCall","src":"1260:18:7"}],"functionName":{"name":"gt","nativeSrc":"1249:2:7","nodeType":"YulIdentifier","src":"1249:2:7"},"nativeSrc":"1249:30:7","nodeType":"YulFunctionCall","src":"1249:30:7"},"nativeSrc":"1246:50:7","nodeType":"YulIf","src":"1246:50:7"},{"nativeSrc":"1305:71:7","nodeType":"YulAssignment","src":"1305:71:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1348:9:7","nodeType":"YulIdentifier","src":"1348:9:7"},{"name":"offset","nativeSrc":"1359:6:7","nodeType":"YulIdentifier","src":"1359:6:7"}],"functionName":{"name":"add","nativeSrc":"1344:3:7","nodeType":"YulIdentifier","src":"1344:3:7"},"nativeSrc":"1344:22:7","nodeType":"YulFunctionCall","src":"1344:22:7"},{"name":"dataEnd","nativeSrc":"1368:7:7","nodeType":"YulIdentifier","src":"1368:7:7"}],"functionName":{"name":"abi_decode_string_fromMemory","nativeSrc":"1315:28:7","nodeType":"YulIdentifier","src":"1315:28:7"},"nativeSrc":"1315:61:7","nodeType":"YulFunctionCall","src":"1315:61:7"},"variableNames":[{"name":"value0","nativeSrc":"1305:6:7","nodeType":"YulIdentifier","src":"1305:6:7"}]},{"nativeSrc":"1385:41:7","nodeType":"YulVariableDeclaration","src":"1385:41:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1411:9:7","nodeType":"YulIdentifier","src":"1411:9:7"},{"kind":"number","nativeSrc":"1422:2:7","nodeType":"YulLiteral","src":"1422:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1407:3:7","nodeType":"YulIdentifier","src":"1407:3:7"},"nativeSrc":"1407:18:7","nodeType":"YulFunctionCall","src":"1407:18:7"}],"functionName":{"name":"mload","nativeSrc":"1401:5:7","nodeType":"YulIdentifier","src":"1401:5:7"},"nativeSrc":"1401:25:7","nodeType":"YulFunctionCall","src":"1401:25:7"},"variables":[{"name":"offset_1","nativeSrc":"1389:8:7","nodeType":"YulTypedName","src":"1389:8:7","type":""}]},{"body":{"nativeSrc":"1471:16:7","nodeType":"YulBlock","src":"1471:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1480:1:7","nodeType":"YulLiteral","src":"1480:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"1483:1:7","nodeType":"YulLiteral","src":"1483:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1473:6:7","nodeType":"YulIdentifier","src":"1473:6:7"},"nativeSrc":"1473:12:7","nodeType":"YulFunctionCall","src":"1473:12:7"},"nativeSrc":"1473:12:7","nodeType":"YulExpressionStatement","src":"1473:12:7"}]},"condition":{"arguments":[{"name":"offset_1","nativeSrc":"1441:8:7","nodeType":"YulIdentifier","src":"1441:8:7"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1459:2:7","nodeType":"YulLiteral","src":"1459:2:7","type":"","value":"64"},{"kind":"number","nativeSrc":"1463:1:7","nodeType":"YulLiteral","src":"1463:1:7","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"1455:3:7","nodeType":"YulIdentifier","src":"1455:3:7"},"nativeSrc":"1455:10:7","nodeType":"YulFunctionCall","src":"1455:10:7"},{"kind":"number","nativeSrc":"1467:1:7","nodeType":"YulLiteral","src":"1467:1:7","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1451:3:7","nodeType":"YulIdentifier","src":"1451:3:7"},"nativeSrc":"1451:18:7","nodeType":"YulFunctionCall","src":"1451:18:7"}],"functionName":{"name":"gt","nativeSrc":"1438:2:7","nodeType":"YulIdentifier","src":"1438:2:7"},"nativeSrc":"1438:32:7","nodeType":"YulFunctionCall","src":"1438:32:7"},"nativeSrc":"1435:52:7","nodeType":"YulIf","src":"1435:52:7"},{"nativeSrc":"1496:73:7","nodeType":"YulAssignment","src":"1496:73:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1539:9:7","nodeType":"YulIdentifier","src":"1539:9:7"},{"name":"offset_1","nativeSrc":"1550:8:7","nodeType":"YulIdentifier","src":"1550:8:7"}],"functionName":{"name":"add","nativeSrc":"1535:3:7","nodeType":"YulIdentifier","src":"1535:3:7"},"nativeSrc":"1535:24:7","nodeType":"YulFunctionCall","src":"1535:24:7"},{"name":"dataEnd","nativeSrc":"1561:7:7","nodeType":"YulIdentifier","src":"1561:7:7"}],"functionName":{"name":"abi_decode_string_fromMemory","nativeSrc":"1506:28:7","nodeType":"YulIdentifier","src":"1506:28:7"},"nativeSrc":"1506:63:7","nodeType":"YulFunctionCall","src":"1506:63:7"},"variableNames":[{"name":"value1","nativeSrc":"1496:6:7","nodeType":"YulIdentifier","src":"1496:6:7"}]},{"nativeSrc":"1578:38:7","nodeType":"YulVariableDeclaration","src":"1578:38:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1601:9:7","nodeType":"YulIdentifier","src":"1601:9:7"},{"kind":"number","nativeSrc":"1612:2:7","nodeType":"YulLiteral","src":"1612:2:7","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"1597:3:7","nodeType":"YulIdentifier","src":"1597:3:7"},"nativeSrc":"1597:18:7","nodeType":"YulFunctionCall","src":"1597:18:7"}],"functionName":{"name":"mload","nativeSrc":"1591:5:7","nodeType":"YulIdentifier","src":"1591:5:7"},"nativeSrc":"1591:25:7","nodeType":"YulFunctionCall","src":"1591:25:7"},"variables":[{"name":"value","nativeSrc":"1582:5:7","nodeType":"YulTypedName","src":"1582:5:7","type":""}]},{"body":{"nativeSrc":"1664:16:7","nodeType":"YulBlock","src":"1664:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1673:1:7","nodeType":"YulLiteral","src":"1673:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"1676:1:7","nodeType":"YulLiteral","src":"1676:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1666:6:7","nodeType":"YulIdentifier","src":"1666:6:7"},"nativeSrc":"1666:12:7","nodeType":"YulFunctionCall","src":"1666:12:7"},"nativeSrc":"1666:12:7","nodeType":"YulExpressionStatement","src":"1666:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1638:5:7","nodeType":"YulIdentifier","src":"1638:5:7"},{"arguments":[{"name":"value","nativeSrc":"1649:5:7","nodeType":"YulIdentifier","src":"1649:5:7"},{"kind":"number","nativeSrc":"1656:4:7","nodeType":"YulLiteral","src":"1656:4:7","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"1645:3:7","nodeType":"YulIdentifier","src":"1645:3:7"},"nativeSrc":"1645:16:7","nodeType":"YulFunctionCall","src":"1645:16:7"}],"functionName":{"name":"eq","nativeSrc":"1635:2:7","nodeType":"YulIdentifier","src":"1635:2:7"},"nativeSrc":"1635:27:7","nodeType":"YulFunctionCall","src":"1635:27:7"}],"functionName":{"name":"iszero","nativeSrc":"1628:6:7","nodeType":"YulIdentifier","src":"1628:6:7"},"nativeSrc":"1628:35:7","nodeType":"YulFunctionCall","src":"1628:35:7"},"nativeSrc":"1625:55:7","nodeType":"YulIf","src":"1625:55:7"},{"nativeSrc":"1689:15:7","nodeType":"YulAssignment","src":"1689:15:7","value":{"name":"value","nativeSrc":"1699:5:7","nodeType":"YulIdentifier","src":"1699:5:7"},"variableNames":[{"name":"value2","nativeSrc":"1689:6:7","nodeType":"YulIdentifier","src":"1689:6:7"}]},{"nativeSrc":"1713:40:7","nodeType":"YulVariableDeclaration","src":"1713:40:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1738:9:7","nodeType":"YulIdentifier","src":"1738:9:7"},{"kind":"number","nativeSrc":"1749:2:7","nodeType":"YulLiteral","src":"1749:2:7","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"1734:3:7","nodeType":"YulIdentifier","src":"1734:3:7"},"nativeSrc":"1734:18:7","nodeType":"YulFunctionCall","src":"1734:18:7"}],"functionName":{"name":"mload","nativeSrc":"1728:5:7","nodeType":"YulIdentifier","src":"1728:5:7"},"nativeSrc":"1728:25:7","nodeType":"YulFunctionCall","src":"1728:25:7"},"variables":[{"name":"value_1","nativeSrc":"1717:7:7","nodeType":"YulTypedName","src":"1717:7:7","type":""}]},{"body":{"nativeSrc":"1820:16:7","nodeType":"YulBlock","src":"1820:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1829:1:7","nodeType":"YulLiteral","src":"1829:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"1832:1:7","nodeType":"YulLiteral","src":"1832:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1822:6:7","nodeType":"YulIdentifier","src":"1822:6:7"},"nativeSrc":"1822:12:7","nodeType":"YulFunctionCall","src":"1822:12:7"},"nativeSrc":"1822:12:7","nodeType":"YulExpressionStatement","src":"1822:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"value_1","nativeSrc":"1775:7:7","nodeType":"YulIdentifier","src":"1775:7:7"},{"arguments":[{"name":"value_1","nativeSrc":"1788:7:7","nodeType":"YulIdentifier","src":"1788:7:7"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1805:3:7","nodeType":"YulLiteral","src":"1805:3:7","type":"","value":"160"},{"kind":"number","nativeSrc":"1810:1:7","nodeType":"YulLiteral","src":"1810:1:7","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"1801:3:7","nodeType":"YulIdentifier","src":"1801:3:7"},"nativeSrc":"1801:11:7","nodeType":"YulFunctionCall","src":"1801:11:7"},{"kind":"number","nativeSrc":"1814:1:7","nodeType":"YulLiteral","src":"1814:1:7","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1797:3:7","nodeType":"YulIdentifier","src":"1797:3:7"},"nativeSrc":"1797:19:7","nodeType":"YulFunctionCall","src":"1797:19:7"}],"functionName":{"name":"and","nativeSrc":"1784:3:7","nodeType":"YulIdentifier","src":"1784:3:7"},"nativeSrc":"1784:33:7","nodeType":"YulFunctionCall","src":"1784:33:7"}],"functionName":{"name":"eq","nativeSrc":"1772:2:7","nodeType":"YulIdentifier","src":"1772:2:7"},"nativeSrc":"1772:46:7","nodeType":"YulFunctionCall","src":"1772:46:7"}],"functionName":{"name":"iszero","nativeSrc":"1765:6:7","nodeType":"YulIdentifier","src":"1765:6:7"},"nativeSrc":"1765:54:7","nodeType":"YulFunctionCall","src":"1765:54:7"},"nativeSrc":"1762:74:7","nodeType":"YulIf","src":"1762:74:7"},{"nativeSrc":"1845:17:7","nodeType":"YulAssignment","src":"1845:17:7","value":{"name":"value_1","nativeSrc":"1855:7:7","nodeType":"YulIdentifier","src":"1855:7:7"},"variableNames":[{"name":"value3","nativeSrc":"1845:6:7","nodeType":"YulIdentifier","src":"1845:6:7"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8t_address_fromMemory","nativeSrc":"985:883:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1077:9:7","nodeType":"YulTypedName","src":"1077:9:7","type":""},{"name":"dataEnd","nativeSrc":"1088:7:7","nodeType":"YulTypedName","src":"1088:7:7","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1100:6:7","nodeType":"YulTypedName","src":"1100:6:7","type":""},{"name":"value1","nativeSrc":"1108:6:7","nodeType":"YulTypedName","src":"1108:6:7","type":""},{"name":"value2","nativeSrc":"1116:6:7","nodeType":"YulTypedName","src":"1116:6:7","type":""},{"name":"value3","nativeSrc":"1124:6:7","nodeType":"YulTypedName","src":"1124:6:7","type":""}],"src":"985:883:7"},{"body":{"nativeSrc":"1928:325:7","nodeType":"YulBlock","src":"1928:325:7","statements":[{"nativeSrc":"1938:22:7","nodeType":"YulAssignment","src":"1938:22:7","value":{"arguments":[{"kind":"number","nativeSrc":"1952:1:7","nodeType":"YulLiteral","src":"1952:1:7","type":"","value":"1"},{"name":"data","nativeSrc":"1955:4:7","nodeType":"YulIdentifier","src":"1955:4:7"}],"functionName":{"name":"shr","nativeSrc":"1948:3:7","nodeType":"YulIdentifier","src":"1948:3:7"},"nativeSrc":"1948:12:7","nodeType":"YulFunctionCall","src":"1948:12:7"},"variableNames":[{"name":"length","nativeSrc":"1938:6:7","nodeType":"YulIdentifier","src":"1938:6:7"}]},{"nativeSrc":"1969:38:7","nodeType":"YulVariableDeclaration","src":"1969:38:7","value":{"arguments":[{"name":"data","nativeSrc":"1999:4:7","nodeType":"YulIdentifier","src":"1999:4:7"},{"kind":"number","nativeSrc":"2005:1:7","nodeType":"YulLiteral","src":"2005:1:7","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"1995:3:7","nodeType":"YulIdentifier","src":"1995:3:7"},"nativeSrc":"1995:12:7","nodeType":"YulFunctionCall","src":"1995:12:7"},"variables":[{"name":"outOfPlaceEncoding","nativeSrc":"1973:18:7","nodeType":"YulTypedName","src":"1973:18:7","type":""}]},{"body":{"nativeSrc":"2046:31:7","nodeType":"YulBlock","src":"2046:31:7","statements":[{"nativeSrc":"2048:27:7","nodeType":"YulAssignment","src":"2048:27:7","value":{"arguments":[{"name":"length","nativeSrc":"2062:6:7","nodeType":"YulIdentifier","src":"2062:6:7"},{"kind":"number","nativeSrc":"2070:4:7","nodeType":"YulLiteral","src":"2070:4:7","type":"","value":"0x7f"}],"functionName":{"name":"and","nativeSrc":"2058:3:7","nodeType":"YulIdentifier","src":"2058:3:7"},"nativeSrc":"2058:17:7","nodeType":"YulFunctionCall","src":"2058:17:7"},"variableNames":[{"name":"length","nativeSrc":"2048:6:7","nodeType":"YulIdentifier","src":"2048:6:7"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"2026:18:7","nodeType":"YulIdentifier","src":"2026:18:7"}],"functionName":{"name":"iszero","nativeSrc":"2019:6:7","nodeType":"YulIdentifier","src":"2019:6:7"},"nativeSrc":"2019:26:7","nodeType":"YulFunctionCall","src":"2019:26:7"},"nativeSrc":"2016:61:7","nodeType":"YulIf","src":"2016:61:7"},{"body":{"nativeSrc":"2136:111:7","nodeType":"YulBlock","src":"2136:111:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2157:1:7","nodeType":"YulLiteral","src":"2157:1:7","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"2164:3:7","nodeType":"YulLiteral","src":"2164:3:7","type":"","value":"224"},{"kind":"number","nativeSrc":"2169:10:7","nodeType":"YulLiteral","src":"2169:10:7","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"2160:3:7","nodeType":"YulIdentifier","src":"2160:3:7"},"nativeSrc":"2160:20:7","nodeType":"YulFunctionCall","src":"2160:20:7"}],"functionName":{"name":"mstore","nativeSrc":"2150:6:7","nodeType":"YulIdentifier","src":"2150:6:7"},"nativeSrc":"2150:31:7","nodeType":"YulFunctionCall","src":"2150:31:7"},"nativeSrc":"2150:31:7","nodeType":"YulExpressionStatement","src":"2150:31:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"2201:1:7","nodeType":"YulLiteral","src":"2201:1:7","type":"","value":"4"},{"kind":"number","nativeSrc":"2204:4:7","nodeType":"YulLiteral","src":"2204:4:7","type":"","value":"0x22"}],"functionName":{"name":"mstore","nativeSrc":"2194:6:7","nodeType":"YulIdentifier","src":"2194:6:7"},"nativeSrc":"2194:15:7","nodeType":"YulFunctionCall","src":"2194:15:7"},"nativeSrc":"2194:15:7","nodeType":"YulExpressionStatement","src":"2194:15:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"2229:1:7","nodeType":"YulLiteral","src":"2229:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"2232:4:7","nodeType":"YulLiteral","src":"2232:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"2222:6:7","nodeType":"YulIdentifier","src":"2222:6:7"},"nativeSrc":"2222:15:7","nodeType":"YulFunctionCall","src":"2222:15:7"},"nativeSrc":"2222:15:7","nodeType":"YulExpressionStatement","src":"2222:15:7"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"2092:18:7","nodeType":"YulIdentifier","src":"2092:18:7"},{"arguments":[{"name":"length","nativeSrc":"2115:6:7","nodeType":"YulIdentifier","src":"2115:6:7"},{"kind":"number","nativeSrc":"2123:2:7","nodeType":"YulLiteral","src":"2123:2:7","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"2112:2:7","nodeType":"YulIdentifier","src":"2112:2:7"},"nativeSrc":"2112:14:7","nodeType":"YulFunctionCall","src":"2112:14:7"}],"functionName":{"name":"eq","nativeSrc":"2089:2:7","nodeType":"YulIdentifier","src":"2089:2:7"},"nativeSrc":"2089:38:7","nodeType":"YulFunctionCall","src":"2089:38:7"},"nativeSrc":"2086:161:7","nodeType":"YulIf","src":"2086:161:7"}]},"name":"extract_byte_array_length","nativeSrc":"1873:380:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"1908:4:7","nodeType":"YulTypedName","src":"1908:4:7","type":""}],"returnVariables":[{"name":"length","nativeSrc":"1917:6:7","nodeType":"YulTypedName","src":"1917:6:7","type":""}],"src":"1873:380:7"},{"body":{"nativeSrc":"2314:65:7","nodeType":"YulBlock","src":"2314:65:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2331:1:7","nodeType":"YulLiteral","src":"2331:1:7","type":"","value":"0"},{"name":"ptr","nativeSrc":"2334:3:7","nodeType":"YulIdentifier","src":"2334:3:7"}],"functionName":{"name":"mstore","nativeSrc":"2324:6:7","nodeType":"YulIdentifier","src":"2324:6:7"},"nativeSrc":"2324:14:7","nodeType":"YulFunctionCall","src":"2324:14:7"},"nativeSrc":"2324:14:7","nodeType":"YulExpressionStatement","src":"2324:14:7"},{"nativeSrc":"2347:26:7","nodeType":"YulAssignment","src":"2347:26:7","value":{"arguments":[{"kind":"number","nativeSrc":"2365:1:7","nodeType":"YulLiteral","src":"2365:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"2368:4:7","nodeType":"YulLiteral","src":"2368:4:7","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"2355:9:7","nodeType":"YulIdentifier","src":"2355:9:7"},"nativeSrc":"2355:18:7","nodeType":"YulFunctionCall","src":"2355:18:7"},"variableNames":[{"name":"data","nativeSrc":"2347:4:7","nodeType":"YulIdentifier","src":"2347:4:7"}]}]},"name":"array_dataslot_string_storage","nativeSrc":"2258:121:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"2297:3:7","nodeType":"YulTypedName","src":"2297:3:7","type":""}],"returnVariables":[{"name":"data","nativeSrc":"2305:4:7","nodeType":"YulTypedName","src":"2305:4:7","type":""}],"src":"2258:121:7"},{"body":{"nativeSrc":"2465:437:7","nodeType":"YulBlock","src":"2465:437:7","statements":[{"body":{"nativeSrc":"2498:398:7","nodeType":"YulBlock","src":"2498:398:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2519:1:7","nodeType":"YulLiteral","src":"2519:1:7","type":"","value":"0"},{"name":"array","nativeSrc":"2522:5:7","nodeType":"YulIdentifier","src":"2522:5:7"}],"functionName":{"name":"mstore","nativeSrc":"2512:6:7","nodeType":"YulIdentifier","src":"2512:6:7"},"nativeSrc":"2512:16:7","nodeType":"YulFunctionCall","src":"2512:16:7"},"nativeSrc":"2512:16:7","nodeType":"YulExpressionStatement","src":"2512:16:7"},{"nativeSrc":"2541:30:7","nodeType":"YulVariableDeclaration","src":"2541:30:7","value":{"arguments":[{"kind":"number","nativeSrc":"2563:1:7","nodeType":"YulLiteral","src":"2563:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"2566:4:7","nodeType":"YulLiteral","src":"2566:4:7","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"2553:9:7","nodeType":"YulIdentifier","src":"2553:9:7"},"nativeSrc":"2553:18:7","nodeType":"YulFunctionCall","src":"2553:18:7"},"variables":[{"name":"data","nativeSrc":"2545:4:7","nodeType":"YulTypedName","src":"2545:4:7","type":""}]},{"nativeSrc":"2584:57:7","nodeType":"YulVariableDeclaration","src":"2584:57:7","value":{"arguments":[{"name":"data","nativeSrc":"2607:4:7","nodeType":"YulIdentifier","src":"2607:4:7"},{"arguments":[{"kind":"number","nativeSrc":"2617:1:7","nodeType":"YulLiteral","src":"2617:1:7","type":"","value":"5"},{"arguments":[{"name":"startIndex","nativeSrc":"2624:10:7","nodeType":"YulIdentifier","src":"2624:10:7"},{"kind":"number","nativeSrc":"2636:2:7","nodeType":"YulLiteral","src":"2636:2:7","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"2620:3:7","nodeType":"YulIdentifier","src":"2620:3:7"},"nativeSrc":"2620:19:7","nodeType":"YulFunctionCall","src":"2620:19:7"}],"functionName":{"name":"shr","nativeSrc":"2613:3:7","nodeType":"YulIdentifier","src":"2613:3:7"},"nativeSrc":"2613:27:7","nodeType":"YulFunctionCall","src":"2613:27:7"}],"functionName":{"name":"add","nativeSrc":"2603:3:7","nodeType":"YulIdentifier","src":"2603:3:7"},"nativeSrc":"2603:38:7","nodeType":"YulFunctionCall","src":"2603:38:7"},"variables":[{"name":"deleteStart","nativeSrc":"2588:11:7","nodeType":"YulTypedName","src":"2588:11:7","type":""}]},{"body":{"nativeSrc":"2678:23:7","nodeType":"YulBlock","src":"2678:23:7","statements":[{"nativeSrc":"2680:19:7","nodeType":"YulAssignment","src":"2680:19:7","value":{"name":"data","nativeSrc":"2695:4:7","nodeType":"YulIdentifier","src":"2695:4:7"},"variableNames":[{"name":"deleteStart","nativeSrc":"2680:11:7","nodeType":"YulIdentifier","src":"2680:11:7"}]}]},"condition":{"arguments":[{"name":"startIndex","nativeSrc":"2660:10:7","nodeType":"YulIdentifier","src":"2660:10:7"},{"kind":"number","nativeSrc":"2672:4:7","nodeType":"YulLiteral","src":"2672:4:7","type":"","value":"0x20"}],"functionName":{"name":"lt","nativeSrc":"2657:2:7","nodeType":"YulIdentifier","src":"2657:2:7"},"nativeSrc":"2657:20:7","nodeType":"YulFunctionCall","src":"2657:20:7"},"nativeSrc":"2654:47:7","nodeType":"YulIf","src":"2654:47:7"},{"nativeSrc":"2714:41:7","nodeType":"YulVariableDeclaration","src":"2714:41:7","value":{"arguments":[{"name":"data","nativeSrc":"2728:4:7","nodeType":"YulIdentifier","src":"2728:4:7"},{"arguments":[{"kind":"number","nativeSrc":"2738:1:7","nodeType":"YulLiteral","src":"2738:1:7","type":"","value":"5"},{"arguments":[{"name":"len","nativeSrc":"2745:3:7","nodeType":"YulIdentifier","src":"2745:3:7"},{"kind":"number","nativeSrc":"2750:2:7","nodeType":"YulLiteral","src":"2750:2:7","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"2741:3:7","nodeType":"YulIdentifier","src":"2741:3:7"},"nativeSrc":"2741:12:7","nodeType":"YulFunctionCall","src":"2741:12:7"}],"functionName":{"name":"shr","nativeSrc":"2734:3:7","nodeType":"YulIdentifier","src":"2734:3:7"},"nativeSrc":"2734:20:7","nodeType":"YulFunctionCall","src":"2734:20:7"}],"functionName":{"name":"add","nativeSrc":"2724:3:7","nodeType":"YulIdentifier","src":"2724:3:7"},"nativeSrc":"2724:31:7","nodeType":"YulFunctionCall","src":"2724:31:7"},"variables":[{"name":"_1","nativeSrc":"2718:2:7","nodeType":"YulTypedName","src":"2718:2:7","type":""}]},{"nativeSrc":"2768:24:7","nodeType":"YulVariableDeclaration","src":"2768:24:7","value":{"name":"deleteStart","nativeSrc":"2781:11:7","nodeType":"YulIdentifier","src":"2781:11:7"},"variables":[{"name":"start","nativeSrc":"2772:5:7","nodeType":"YulTypedName","src":"2772:5:7","type":""}]},{"body":{"nativeSrc":"2866:20:7","nodeType":"YulBlock","src":"2866:20:7","statements":[{"expression":{"arguments":[{"name":"start","nativeSrc":"2875:5:7","nodeType":"YulIdentifier","src":"2875:5:7"},{"kind":"number","nativeSrc":"2882:1:7","nodeType":"YulLiteral","src":"2882:1:7","type":"","value":"0"}],"functionName":{"name":"sstore","nativeSrc":"2868:6:7","nodeType":"YulIdentifier","src":"2868:6:7"},"nativeSrc":"2868:16:7","nodeType":"YulFunctionCall","src":"2868:16:7"},"nativeSrc":"2868:16:7","nodeType":"YulExpressionStatement","src":"2868:16:7"}]},"condition":{"arguments":[{"name":"start","nativeSrc":"2816:5:7","nodeType":"YulIdentifier","src":"2816:5:7"},{"name":"_1","nativeSrc":"2823:2:7","nodeType":"YulIdentifier","src":"2823:2:7"}],"functionName":{"name":"lt","nativeSrc":"2813:2:7","nodeType":"YulIdentifier","src":"2813:2:7"},"nativeSrc":"2813:13:7","nodeType":"YulFunctionCall","src":"2813:13:7"},"nativeSrc":"2805:81:7","nodeType":"YulForLoop","post":{"nativeSrc":"2827:26:7","nodeType":"YulBlock","src":"2827:26:7","statements":[{"nativeSrc":"2829:22:7","nodeType":"YulAssignment","src":"2829:22:7","value":{"arguments":[{"name":"start","nativeSrc":"2842:5:7","nodeType":"YulIdentifier","src":"2842:5:7"},{"kind":"number","nativeSrc":"2849:1:7","nodeType":"YulLiteral","src":"2849:1:7","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2838:3:7","nodeType":"YulIdentifier","src":"2838:3:7"},"nativeSrc":"2838:13:7","nodeType":"YulFunctionCall","src":"2838:13:7"},"variableNames":[{"name":"start","nativeSrc":"2829:5:7","nodeType":"YulIdentifier","src":"2829:5:7"}]}]},"pre":{"nativeSrc":"2809:3:7","nodeType":"YulBlock","src":"2809:3:7","statements":[]},"src":"2805:81:7"}]},"condition":{"arguments":[{"name":"len","nativeSrc":"2481:3:7","nodeType":"YulIdentifier","src":"2481:3:7"},{"kind":"number","nativeSrc":"2486:2:7","nodeType":"YulLiteral","src":"2486:2:7","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"2478:2:7","nodeType":"YulIdentifier","src":"2478:2:7"},"nativeSrc":"2478:11:7","nodeType":"YulFunctionCall","src":"2478:11:7"},"nativeSrc":"2475:421:7","nodeType":"YulIf","src":"2475:421:7"}]},"name":"clean_up_bytearray_end_slots_string_storage","nativeSrc":"2384:518:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nativeSrc":"2437:5:7","nodeType":"YulTypedName","src":"2437:5:7","type":""},{"name":"len","nativeSrc":"2444:3:7","nodeType":"YulTypedName","src":"2444:3:7","type":""},{"name":"startIndex","nativeSrc":"2449:10:7","nodeType":"YulTypedName","src":"2449:10:7","type":""}],"src":"2384:518:7"},{"body":{"nativeSrc":"2992:81:7","nodeType":"YulBlock","src":"2992:81:7","statements":[{"nativeSrc":"3002:65:7","nodeType":"YulAssignment","src":"3002:65:7","value":{"arguments":[{"arguments":[{"name":"data","nativeSrc":"3017:4:7","nodeType":"YulIdentifier","src":"3017:4:7"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"3035:1:7","nodeType":"YulLiteral","src":"3035:1:7","type":"","value":"3"},{"name":"len","nativeSrc":"3038:3:7","nodeType":"YulIdentifier","src":"3038:3:7"}],"functionName":{"name":"shl","nativeSrc":"3031:3:7","nodeType":"YulIdentifier","src":"3031:3:7"},"nativeSrc":"3031:11:7","nodeType":"YulFunctionCall","src":"3031:11:7"},{"arguments":[{"kind":"number","nativeSrc":"3048:1:7","nodeType":"YulLiteral","src":"3048:1:7","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"3044:3:7","nodeType":"YulIdentifier","src":"3044:3:7"},"nativeSrc":"3044:6:7","nodeType":"YulFunctionCall","src":"3044:6:7"}],"functionName":{"name":"shr","nativeSrc":"3027:3:7","nodeType":"YulIdentifier","src":"3027:3:7"},"nativeSrc":"3027:24:7","nodeType":"YulFunctionCall","src":"3027:24:7"}],"functionName":{"name":"not","nativeSrc":"3023:3:7","nodeType":"YulIdentifier","src":"3023:3:7"},"nativeSrc":"3023:29:7","nodeType":"YulFunctionCall","src":"3023:29:7"}],"functionName":{"name":"and","nativeSrc":"3013:3:7","nodeType":"YulIdentifier","src":"3013:3:7"},"nativeSrc":"3013:40:7","nodeType":"YulFunctionCall","src":"3013:40:7"},{"arguments":[{"kind":"number","nativeSrc":"3059:1:7","nodeType":"YulLiteral","src":"3059:1:7","type":"","value":"1"},{"name":"len","nativeSrc":"3062:3:7","nodeType":"YulIdentifier","src":"3062:3:7"}],"functionName":{"name":"shl","nativeSrc":"3055:3:7","nodeType":"YulIdentifier","src":"3055:3:7"},"nativeSrc":"3055:11:7","nodeType":"YulFunctionCall","src":"3055:11:7"}],"functionName":{"name":"or","nativeSrc":"3010:2:7","nodeType":"YulIdentifier","src":"3010:2:7"},"nativeSrc":"3010:57:7","nodeType":"YulFunctionCall","src":"3010:57:7"},"variableNames":[{"name":"used","nativeSrc":"3002:4:7","nodeType":"YulIdentifier","src":"3002:4:7"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"2907:166:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"2969:4:7","nodeType":"YulTypedName","src":"2969:4:7","type":""},{"name":"len","nativeSrc":"2975:3:7","nodeType":"YulTypedName","src":"2975:3:7","type":""}],"returnVariables":[{"name":"used","nativeSrc":"2983:4:7","nodeType":"YulTypedName","src":"2983:4:7","type":""}],"src":"2907:166:7"},{"body":{"nativeSrc":"3174:1203:7","nodeType":"YulBlock","src":"3174:1203:7","statements":[{"nativeSrc":"3184:24:7","nodeType":"YulVariableDeclaration","src":"3184:24:7","value":{"arguments":[{"name":"src","nativeSrc":"3204:3:7","nodeType":"YulIdentifier","src":"3204:3:7"}],"functionName":{"name":"mload","nativeSrc":"3198:5:7","nodeType":"YulIdentifier","src":"3198:5:7"},"nativeSrc":"3198:10:7","nodeType":"YulFunctionCall","src":"3198:10:7"},"variables":[{"name":"newLen","nativeSrc":"3188:6:7","nodeType":"YulTypedName","src":"3188:6:7","type":""}]},{"body":{"nativeSrc":"3251:22:7","nodeType":"YulBlock","src":"3251:22:7","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"3253:16:7","nodeType":"YulIdentifier","src":"3253:16:7"},"nativeSrc":"3253:18:7","nodeType":"YulFunctionCall","src":"3253:18:7"},"nativeSrc":"3253:18:7","nodeType":"YulExpressionStatement","src":"3253:18:7"}]},"condition":{"arguments":[{"name":"newLen","nativeSrc":"3223:6:7","nodeType":"YulIdentifier","src":"3223:6:7"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"3239:2:7","nodeType":"YulLiteral","src":"3239:2:7","type":"","value":"64"},{"kind":"number","nativeSrc":"3243:1:7","nodeType":"YulLiteral","src":"3243:1:7","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"3235:3:7","nodeType":"YulIdentifier","src":"3235:3:7"},"nativeSrc":"3235:10:7","nodeType":"YulFunctionCall","src":"3235:10:7"},{"kind":"number","nativeSrc":"3247:1:7","nodeType":"YulLiteral","src":"3247:1:7","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3231:3:7","nodeType":"YulIdentifier","src":"3231:3:7"},"nativeSrc":"3231:18:7","nodeType":"YulFunctionCall","src":"3231:18:7"}],"functionName":{"name":"gt","nativeSrc":"3220:2:7","nodeType":"YulIdentifier","src":"3220:2:7"},"nativeSrc":"3220:30:7","nodeType":"YulFunctionCall","src":"3220:30:7"},"nativeSrc":"3217:56:7","nodeType":"YulIf","src":"3217:56:7"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"3326:4:7","nodeType":"YulIdentifier","src":"3326:4:7"},{"arguments":[{"arguments":[{"name":"slot","nativeSrc":"3364:4:7","nodeType":"YulIdentifier","src":"3364:4:7"}],"functionName":{"name":"sload","nativeSrc":"3358:5:7","nodeType":"YulIdentifier","src":"3358:5:7"},"nativeSrc":"3358:11:7","nodeType":"YulFunctionCall","src":"3358:11:7"}],"functionName":{"name":"extract_byte_array_length","nativeSrc":"3332:25:7","nodeType":"YulIdentifier","src":"3332:25:7"},"nativeSrc":"3332:38:7","nodeType":"YulFunctionCall","src":"3332:38:7"},{"name":"newLen","nativeSrc":"3372:6:7","nodeType":"YulIdentifier","src":"3372:6:7"}],"functionName":{"name":"clean_up_bytearray_end_slots_string_storage","nativeSrc":"3282:43:7","nodeType":"YulIdentifier","src":"3282:43:7"},"nativeSrc":"3282:97:7","nodeType":"YulFunctionCall","src":"3282:97:7"},"nativeSrc":"3282:97:7","nodeType":"YulExpressionStatement","src":"3282:97:7"},{"nativeSrc":"3388:18:7","nodeType":"YulVariableDeclaration","src":"3388:18:7","value":{"kind":"number","nativeSrc":"3405:1:7","nodeType":"YulLiteral","src":"3405:1:7","type":"","value":"0"},"variables":[{"name":"srcOffset","nativeSrc":"3392:9:7","nodeType":"YulTypedName","src":"3392:9:7","type":""}]},{"nativeSrc":"3415:17:7","nodeType":"YulAssignment","src":"3415:17:7","value":{"kind":"number","nativeSrc":"3428:4:7","nodeType":"YulLiteral","src":"3428:4:7","type":"","value":"0x20"},"variableNames":[{"name":"srcOffset","nativeSrc":"3415:9:7","nodeType":"YulIdentifier","src":"3415:9:7"}]},{"cases":[{"body":{"nativeSrc":"3478:642:7","nodeType":"YulBlock","src":"3478:642:7","statements":[{"nativeSrc":"3492:35:7","nodeType":"YulVariableDeclaration","src":"3492:35:7","value":{"arguments":[{"name":"newLen","nativeSrc":"3511:6:7","nodeType":"YulIdentifier","src":"3511:6:7"},{"arguments":[{"kind":"number","nativeSrc":"3523:2:7","nodeType":"YulLiteral","src":"3523:2:7","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"3519:3:7","nodeType":"YulIdentifier","src":"3519:3:7"},"nativeSrc":"3519:7:7","nodeType":"YulFunctionCall","src":"3519:7:7"}],"functionName":{"name":"and","nativeSrc":"3507:3:7","nodeType":"YulIdentifier","src":"3507:3:7"},"nativeSrc":"3507:20:7","nodeType":"YulFunctionCall","src":"3507:20:7"},"variables":[{"name":"loopEnd","nativeSrc":"3496:7:7","nodeType":"YulTypedName","src":"3496:7:7","type":""}]},{"nativeSrc":"3540:49:7","nodeType":"YulVariableDeclaration","src":"3540:49:7","value":{"arguments":[{"name":"slot","nativeSrc":"3584:4:7","nodeType":"YulIdentifier","src":"3584:4:7"}],"functionName":{"name":"array_dataslot_string_storage","nativeSrc":"3554:29:7","nodeType":"YulIdentifier","src":"3554:29:7"},"nativeSrc":"3554:35:7","nodeType":"YulFunctionCall","src":"3554:35:7"},"variables":[{"name":"dstPtr","nativeSrc":"3544:6:7","nodeType":"YulTypedName","src":"3544:6:7","type":""}]},{"nativeSrc":"3602:10:7","nodeType":"YulVariableDeclaration","src":"3602:10:7","value":{"kind":"number","nativeSrc":"3611:1:7","nodeType":"YulLiteral","src":"3611:1:7","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"3606:1:7","nodeType":"YulTypedName","src":"3606:1:7","type":""}]},{"body":{"nativeSrc":"3682:165:7","nodeType":"YulBlock","src":"3682:165:7","statements":[{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"3707:6:7","nodeType":"YulIdentifier","src":"3707:6:7"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"3725:3:7","nodeType":"YulIdentifier","src":"3725:3:7"},{"name":"srcOffset","nativeSrc":"3730:9:7","nodeType":"YulIdentifier","src":"3730:9:7"}],"functionName":{"name":"add","nativeSrc":"3721:3:7","nodeType":"YulIdentifier","src":"3721:3:7"},"nativeSrc":"3721:19:7","nodeType":"YulFunctionCall","src":"3721:19:7"}],"functionName":{"name":"mload","nativeSrc":"3715:5:7","nodeType":"YulIdentifier","src":"3715:5:7"},"nativeSrc":"3715:26:7","nodeType":"YulFunctionCall","src":"3715:26:7"}],"functionName":{"name":"sstore","nativeSrc":"3700:6:7","nodeType":"YulIdentifier","src":"3700:6:7"},"nativeSrc":"3700:42:7","nodeType":"YulFunctionCall","src":"3700:42:7"},"nativeSrc":"3700:42:7","nodeType":"YulExpressionStatement","src":"3700:42:7"},{"nativeSrc":"3759:24:7","nodeType":"YulAssignment","src":"3759:24:7","value":{"arguments":[{"name":"dstPtr","nativeSrc":"3773:6:7","nodeType":"YulIdentifier","src":"3773:6:7"},{"kind":"number","nativeSrc":"3781:1:7","nodeType":"YulLiteral","src":"3781:1:7","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"3769:3:7","nodeType":"YulIdentifier","src":"3769:3:7"},"nativeSrc":"3769:14:7","nodeType":"YulFunctionCall","src":"3769:14:7"},"variableNames":[{"name":"dstPtr","nativeSrc":"3759:6:7","nodeType":"YulIdentifier","src":"3759:6:7"}]},{"nativeSrc":"3800:33:7","nodeType":"YulAssignment","src":"3800:33:7","value":{"arguments":[{"name":"srcOffset","nativeSrc":"3817:9:7","nodeType":"YulIdentifier","src":"3817:9:7"},{"kind":"number","nativeSrc":"3828:4:7","nodeType":"YulLiteral","src":"3828:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3813:3:7","nodeType":"YulIdentifier","src":"3813:3:7"},"nativeSrc":"3813:20:7","nodeType":"YulFunctionCall","src":"3813:20:7"},"variableNames":[{"name":"srcOffset","nativeSrc":"3800:9:7","nodeType":"YulIdentifier","src":"3800:9:7"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"3636:1:7","nodeType":"YulIdentifier","src":"3636:1:7"},{"name":"loopEnd","nativeSrc":"3639:7:7","nodeType":"YulIdentifier","src":"3639:7:7"}],"functionName":{"name":"lt","nativeSrc":"3633:2:7","nodeType":"YulIdentifier","src":"3633:2:7"},"nativeSrc":"3633:14:7","nodeType":"YulFunctionCall","src":"3633:14:7"},"nativeSrc":"3625:222:7","nodeType":"YulForLoop","post":{"nativeSrc":"3648:21:7","nodeType":"YulBlock","src":"3648:21:7","statements":[{"nativeSrc":"3650:17:7","nodeType":"YulAssignment","src":"3650:17:7","value":{"arguments":[{"name":"i","nativeSrc":"3659:1:7","nodeType":"YulIdentifier","src":"3659:1:7"},{"kind":"number","nativeSrc":"3662:4:7","nodeType":"YulLiteral","src":"3662:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3655:3:7","nodeType":"YulIdentifier","src":"3655:3:7"},"nativeSrc":"3655:12:7","nodeType":"YulFunctionCall","src":"3655:12:7"},"variableNames":[{"name":"i","nativeSrc":"3650:1:7","nodeType":"YulIdentifier","src":"3650:1:7"}]}]},"pre":{"nativeSrc":"3629:3:7","nodeType":"YulBlock","src":"3629:3:7","statements":[]},"src":"3625:222:7"},{"body":{"nativeSrc":"3895:166:7","nodeType":"YulBlock","src":"3895:166:7","statements":[{"nativeSrc":"3913:43:7","nodeType":"YulVariableDeclaration","src":"3913:43:7","value":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"3940:3:7","nodeType":"YulIdentifier","src":"3940:3:7"},{"name":"srcOffset","nativeSrc":"3945:9:7","nodeType":"YulIdentifier","src":"3945:9:7"}],"functionName":{"name":"add","nativeSrc":"3936:3:7","nodeType":"YulIdentifier","src":"3936:3:7"},"nativeSrc":"3936:19:7","nodeType":"YulFunctionCall","src":"3936:19:7"}],"functionName":{"name":"mload","nativeSrc":"3930:5:7","nodeType":"YulIdentifier","src":"3930:5:7"},"nativeSrc":"3930:26:7","nodeType":"YulFunctionCall","src":"3930:26:7"},"variables":[{"name":"lastValue","nativeSrc":"3917:9:7","nodeType":"YulTypedName","src":"3917:9:7","type":""}]},{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"3980:6:7","nodeType":"YulIdentifier","src":"3980:6:7"},{"arguments":[{"name":"lastValue","nativeSrc":"3992:9:7","nodeType":"YulIdentifier","src":"3992:9:7"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"4019:1:7","nodeType":"YulLiteral","src":"4019:1:7","type":"","value":"3"},{"name":"newLen","nativeSrc":"4022:6:7","nodeType":"YulIdentifier","src":"4022:6:7"}],"functionName":{"name":"shl","nativeSrc":"4015:3:7","nodeType":"YulIdentifier","src":"4015:3:7"},"nativeSrc":"4015:14:7","nodeType":"YulFunctionCall","src":"4015:14:7"},{"kind":"number","nativeSrc":"4031:3:7","nodeType":"YulLiteral","src":"4031:3:7","type":"","value":"248"}],"functionName":{"name":"and","nativeSrc":"4011:3:7","nodeType":"YulIdentifier","src":"4011:3:7"},"nativeSrc":"4011:24:7","nodeType":"YulFunctionCall","src":"4011:24:7"},{"arguments":[{"kind":"number","nativeSrc":"4041:1:7","nodeType":"YulLiteral","src":"4041:1:7","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"4037:3:7","nodeType":"YulIdentifier","src":"4037:3:7"},"nativeSrc":"4037:6:7","nodeType":"YulFunctionCall","src":"4037:6:7"}],"functionName":{"name":"shr","nativeSrc":"4007:3:7","nodeType":"YulIdentifier","src":"4007:3:7"},"nativeSrc":"4007:37:7","nodeType":"YulFunctionCall","src":"4007:37:7"}],"functionName":{"name":"not","nativeSrc":"4003:3:7","nodeType":"YulIdentifier","src":"4003:3:7"},"nativeSrc":"4003:42:7","nodeType":"YulFunctionCall","src":"4003:42:7"}],"functionName":{"name":"and","nativeSrc":"3988:3:7","nodeType":"YulIdentifier","src":"3988:3:7"},"nativeSrc":"3988:58:7","nodeType":"YulFunctionCall","src":"3988:58:7"}],"functionName":{"name":"sstore","nativeSrc":"3973:6:7","nodeType":"YulIdentifier","src":"3973:6:7"},"nativeSrc":"3973:74:7","nodeType":"YulFunctionCall","src":"3973:74:7"},"nativeSrc":"3973:74:7","nodeType":"YulExpressionStatement","src":"3973:74:7"}]},"condition":{"arguments":[{"name":"loopEnd","nativeSrc":"3866:7:7","nodeType":"YulIdentifier","src":"3866:7:7"},{"name":"newLen","nativeSrc":"3875:6:7","nodeType":"YulIdentifier","src":"3875:6:7"}],"functionName":{"name":"lt","nativeSrc":"3863:2:7","nodeType":"YulIdentifier","src":"3863:2:7"},"nativeSrc":"3863:19:7","nodeType":"YulFunctionCall","src":"3863:19:7"},"nativeSrc":"3860:201:7","nodeType":"YulIf","src":"3860:201:7"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"4081:4:7","nodeType":"YulIdentifier","src":"4081:4:7"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"4095:1:7","nodeType":"YulLiteral","src":"4095:1:7","type":"","value":"1"},{"name":"newLen","nativeSrc":"4098:6:7","nodeType":"YulIdentifier","src":"4098:6:7"}],"functionName":{"name":"shl","nativeSrc":"4091:3:7","nodeType":"YulIdentifier","src":"4091:3:7"},"nativeSrc":"4091:14:7","nodeType":"YulFunctionCall","src":"4091:14:7"},{"kind":"number","nativeSrc":"4107:1:7","nodeType":"YulLiteral","src":"4107:1:7","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"4087:3:7","nodeType":"YulIdentifier","src":"4087:3:7"},"nativeSrc":"4087:22:7","nodeType":"YulFunctionCall","src":"4087:22:7"}],"functionName":{"name":"sstore","nativeSrc":"4074:6:7","nodeType":"YulIdentifier","src":"4074:6:7"},"nativeSrc":"4074:36:7","nodeType":"YulFunctionCall","src":"4074:36:7"},"nativeSrc":"4074:36:7","nodeType":"YulExpressionStatement","src":"4074:36:7"}]},"nativeSrc":"3471:649:7","nodeType":"YulCase","src":"3471:649:7","value":{"kind":"number","nativeSrc":"3476:1:7","nodeType":"YulLiteral","src":"3476:1:7","type":"","value":"1"}},{"body":{"nativeSrc":"4137:234:7","nodeType":"YulBlock","src":"4137:234:7","statements":[{"nativeSrc":"4151:14:7","nodeType":"YulVariableDeclaration","src":"4151:14:7","value":{"kind":"number","nativeSrc":"4164:1:7","nodeType":"YulLiteral","src":"4164:1:7","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"4155:5:7","nodeType":"YulTypedName","src":"4155:5:7","type":""}]},{"body":{"nativeSrc":"4200:67:7","nodeType":"YulBlock","src":"4200:67:7","statements":[{"nativeSrc":"4218:35:7","nodeType":"YulAssignment","src":"4218:35:7","value":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"4237:3:7","nodeType":"YulIdentifier","src":"4237:3:7"},{"name":"srcOffset","nativeSrc":"4242:9:7","nodeType":"YulIdentifier","src":"4242:9:7"}],"functionName":{"name":"add","nativeSrc":"4233:3:7","nodeType":"YulIdentifier","src":"4233:3:7"},"nativeSrc":"4233:19:7","nodeType":"YulFunctionCall","src":"4233:19:7"}],"functionName":{"name":"mload","nativeSrc":"4227:5:7","nodeType":"YulIdentifier","src":"4227:5:7"},"nativeSrc":"4227:26:7","nodeType":"YulFunctionCall","src":"4227:26:7"},"variableNames":[{"name":"value","nativeSrc":"4218:5:7","nodeType":"YulIdentifier","src":"4218:5:7"}]}]},"condition":{"name":"newLen","nativeSrc":"4181:6:7","nodeType":"YulIdentifier","src":"4181:6:7"},"nativeSrc":"4178:89:7","nodeType":"YulIf","src":"4178:89:7"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"4287:4:7","nodeType":"YulIdentifier","src":"4287:4:7"},{"arguments":[{"name":"value","nativeSrc":"4346:5:7","nodeType":"YulIdentifier","src":"4346:5:7"},{"name":"newLen","nativeSrc":"4353:6:7","nodeType":"YulIdentifier","src":"4353:6:7"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"4293:52:7","nodeType":"YulIdentifier","src":"4293:52:7"},"nativeSrc":"4293:67:7","nodeType":"YulFunctionCall","src":"4293:67:7"}],"functionName":{"name":"sstore","nativeSrc":"4280:6:7","nodeType":"YulIdentifier","src":"4280:6:7"},"nativeSrc":"4280:81:7","nodeType":"YulFunctionCall","src":"4280:81:7"},"nativeSrc":"4280:81:7","nodeType":"YulExpressionStatement","src":"4280:81:7"}]},"nativeSrc":"4129:242:7","nodeType":"YulCase","src":"4129:242:7","value":"default"}],"expression":{"arguments":[{"name":"newLen","nativeSrc":"3451:6:7","nodeType":"YulIdentifier","src":"3451:6:7"},{"kind":"number","nativeSrc":"3459:2:7","nodeType":"YulLiteral","src":"3459:2:7","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"3448:2:7","nodeType":"YulIdentifier","src":"3448:2:7"},"nativeSrc":"3448:14:7","nodeType":"YulFunctionCall","src":"3448:14:7"},"nativeSrc":"3441:930:7","nodeType":"YulSwitch","src":"3441:930:7"}]},"name":"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage","nativeSrc":"3078:1299:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"3159:4:7","nodeType":"YulTypedName","src":"3159:4:7","type":""},{"name":"src","nativeSrc":"3165:3:7","nodeType":"YulTypedName","src":"3165:3:7","type":""}],"src":"3078:1299:7"},{"body":{"nativeSrc":"4483:102:7","nodeType":"YulBlock","src":"4483:102:7","statements":[{"nativeSrc":"4493:26:7","nodeType":"YulAssignment","src":"4493:26:7","value":{"arguments":[{"name":"headStart","nativeSrc":"4505:9:7","nodeType":"YulIdentifier","src":"4505:9:7"},{"kind":"number","nativeSrc":"4516:2:7","nodeType":"YulLiteral","src":"4516:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4501:3:7","nodeType":"YulIdentifier","src":"4501:3:7"},"nativeSrc":"4501:18:7","nodeType":"YulFunctionCall","src":"4501:18:7"},"variableNames":[{"name":"tail","nativeSrc":"4493:4:7","nodeType":"YulIdentifier","src":"4493:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"4535:9:7","nodeType":"YulIdentifier","src":"4535:9:7"},{"arguments":[{"name":"value0","nativeSrc":"4550:6:7","nodeType":"YulIdentifier","src":"4550:6:7"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"4566:3:7","nodeType":"YulLiteral","src":"4566:3:7","type":"","value":"160"},{"kind":"number","nativeSrc":"4571:1:7","nodeType":"YulLiteral","src":"4571:1:7","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"4562:3:7","nodeType":"YulIdentifier","src":"4562:3:7"},"nativeSrc":"4562:11:7","nodeType":"YulFunctionCall","src":"4562:11:7"},{"kind":"number","nativeSrc":"4575:1:7","nodeType":"YulLiteral","src":"4575:1:7","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"4558:3:7","nodeType":"YulIdentifier","src":"4558:3:7"},"nativeSrc":"4558:19:7","nodeType":"YulFunctionCall","src":"4558:19:7"}],"functionName":{"name":"and","nativeSrc":"4546:3:7","nodeType":"YulIdentifier","src":"4546:3:7"},"nativeSrc":"4546:32:7","nodeType":"YulFunctionCall","src":"4546:32:7"}],"functionName":{"name":"mstore","nativeSrc":"4528:6:7","nodeType":"YulIdentifier","src":"4528:6:7"},"nativeSrc":"4528:51:7","nodeType":"YulFunctionCall","src":"4528:51:7"},"nativeSrc":"4528:51:7","nodeType":"YulExpressionStatement","src":"4528:51:7"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"4382:203:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4452:9:7","nodeType":"YulTypedName","src":"4452:9:7","type":""},{"name":"value0","nativeSrc":"4463:6:7","nodeType":"YulTypedName","src":"4463:6:7","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4474:4:7","nodeType":"YulTypedName","src":"4474:4:7","type":""}],"src":"4382:203:7"}]},"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 length := mload(offset)\n        if gt(length, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(length, 0x1f), not(31)), 63), not(31)))\n        if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, length)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            mstore(add(add(memPtr, i), 0x20), mload(add(add(offset, i), 0x20)))\n        }\n        mstore(add(add(memPtr, length), 0x20), 0)\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        if gt(offset, sub(shl(64, 1), 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, sub(shl(64, 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 extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            mstore(0, array)\n            let data := keccak256(0, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _1 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _1) { start := add(start, 1) }\n            { sstore(start, 0) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        srcOffset := 0x20\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, 0x20) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, 0x20)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}","id":7,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b50604051610f72380380610f7283398101604081905261002f916101b8565b808484600361003e83826102e2565b50600461004b82826102e2565b5050506001600160a01b03811661007c57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b610085816100ad565b50506005805460ff909216600160a01b0260ff60a01b19909216919091179055506103a09050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261012657600080fd5b81516001600160401b0381111561013f5761013f6100ff565b604051601f8201601f19908116603f011681016001600160401b038111828210171561016d5761016d6100ff565b60405281815283820160200185101561018557600080fd5b60005b828110156101a457602081860181015183830182015201610188565b506000918101602001919091529392505050565b600080600080608085870312156101ce57600080fd5b84516001600160401b038111156101e457600080fd5b6101f087828801610115565b602087015190955090506001600160401b0381111561020e57600080fd5b61021a87828801610115565b935050604085015160ff8116811461023157600080fd5b60608601519092506001600160a01b038116811461024e57600080fd5b939692955090935050565b600181811c9082168061026d57607f821691505b60208210810361028d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102dd57806000526020600020601f840160051c810160208510156102ba5750805b601f840160051c820191505b818110156102da57600081556001016102c6565b50505b505050565b81516001600160401b038111156102fb576102fb6100ff565b61030f816103098454610259565b84610293565b6020601f821160018114610343576000831561032b5750848201515b600019600385901b1c1916600184901b1784556102da565b600084815260208120601f198516915b828110156103735787850151825560209485019460019092019101610353565b50848210156103915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610bc3806103af6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a08231116100975780639dc29fac116100665780639dc29fac146101fb578063a9059cbb1461020e578063dd62ed3e14610221578063f2fde38b1461025a57600080fd5b806370a08231146101a7578063715018a6146101d05780638da5cb5b146101d857806395d89b41146101f357600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce5671461016057806340c10f191461017f578063685731071461019457600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b61010261026d565b60405161010f9190610855565b60405180910390f35b61012b6101263660046108bf565b6102ff565b604051901515815260200161010f565b6002545b60405190815260200161010f565b61012b61015b3660046108e9565b610319565b600554600160a01b900460ff1660405160ff909116815260200161010f565b61019261018d3660046108bf565b61033d565b005b6101926101a23660046109fe565b610353565b61013f6101b5366004610ac7565b6001600160a01b031660009081526020819052604090205490565b6101926103ff565b6005546040516001600160a01b03909116815260200161010f565b610102610413565b6101926102093660046108bf565b610422565b61012b61021c3660046108bf565b610434565b61013f61022f366004610ae9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610192610268366004610ac7565b610442565b60606003805461027c90610b1c565b80601f01602080910402602001604051908101604052809291908181526020018280546102a890610b1c565b80156102f55780601f106102ca576101008083540402835291602001916102f5565b820191906000526020600020905b8154815290600101906020018083116102d857829003601f168201915b5050505050905090565b60003361030d818585610480565b60019150505b92915050565b60003361032785828561048d565b61033285858561050c565b506001949350505050565b61034561056b565b61034f8282610598565b5050565b61035b61056b565b80518251146103aa5760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064015b60405180910390fd5b60005b82518110156103fa576103f28382815181106103cb576103cb610b56565b60200260200101518383815181106103e5576103e5610b56565b6020026020010151610598565b6001016103ad565b505050565b61040761056b565b61041160006105ce565b565b60606004805461027c90610b1c565b61042a61056b565b61034f8282610620565b60003361030d81858561050c565b61044a61056b565b6001600160a01b03811661047457604051631e4fbdf760e01b8152600060048201526024016103a1565b61047d816105ce565b50565b6103fa8383836001610656565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981101561050657818110156104f757604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103a1565b61050684848484036000610656565b50505050565b6001600160a01b03831661053657604051634b637e8f60e11b8152600060048201526024016103a1565b6001600160a01b0382166105605760405163ec442f0560e01b8152600060048201526024016103a1565b6103fa83838361072b565b6005546001600160a01b031633146104115760405163118cdaa760e01b81523360048201526024016103a1565b6001600160a01b0382166105c25760405163ec442f0560e01b8152600060048201526024016103a1565b61034f6000838361072b565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661064a57604051634b637e8f60e11b8152600060048201526024016103a1565b61034f8260008361072b565b6001600160a01b0384166106805760405163e602df0560e01b8152600060048201526024016103a1565b6001600160a01b0383166106aa57604051634a1406b160e11b8152600060048201526024016103a1565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561050657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161071d91815260200190565b60405180910390a350505050565b6001600160a01b03831661075657806002600082825461074b9190610b6c565b909155506107c89050565b6001600160a01b038316600090815260208190526040902054818110156107a95760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103a1565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166107e457600280548290039055610803565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161084891815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156108835760208186018101516040868401015201610866565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146108ba57600080fd5b919050565b600080604083850312156108d257600080fd5b6108db836108a3565b946020939093013593505050565b6000806000606084860312156108fe57600080fd5b610907846108a3565b9250610915602085016108a3565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561096557610965610926565b604052919050565b600067ffffffffffffffff82111561098757610987610926565b5060051b60200190565b600082601f8301126109a257600080fd5b81356109b56109b08261096d565b61093c565b8082825260208201915060208360051b8601019250858311156109d757600080fd5b602085015b838110156109f45780358352602092830192016109dc565b5095945050505050565b60008060408385031215610a1157600080fd5b823567ffffffffffffffff811115610a2857600080fd5b8301601f81018513610a3957600080fd5b8035610a476109b08261096d565b8082825260208201915060208360051b850101925087831115610a6957600080fd5b6020840193505b82841015610a9257610a81846108a3565b825260209384019390910190610a70565b9450505050602083013567ffffffffffffffff811115610ab157600080fd5b610abd85828601610991565b9150509250929050565b600060208284031215610ad957600080fd5b610ae2826108a3565b9392505050565b60008060408385031215610afc57600080fd5b610b05836108a3565b9150610b13602084016108a3565b90509250929050565b600181811c90821680610b3057607f821691505b602082108103610b5057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b8082018082111561031357634e487b7160e01b600052601160045260246000fdfea2646970667358221220e1290b96e57f4acc109d889a1d12169bef2020982f3fb3256de6c0f120a1ff0164736f6c634300081c0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xF72 CODESIZE SUB DUP1 PUSH2 0xF72 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x1B8 JUMP JUMPDEST DUP1 DUP5 DUP5 PUSH1 0x3 PUSH2 0x3E DUP4 DUP3 PUSH2 0x2E2 JUMP JUMPDEST POP PUSH1 0x4 PUSH2 0x4B DUP3 DUP3 PUSH2 0x2E2 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7C JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x85 DUP2 PUSH2 0xAD JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH2 0x3A0 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x13F JUMPI PUSH2 0x13F PUSH2 0xFF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x16D JUMPI PUSH2 0x16D PUSH2 0xFF JUMP JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP2 MSTORE DUP4 DUP3 ADD PUSH1 0x20 ADD DUP6 LT ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP4 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x188 JUMP JUMPDEST POP 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 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1F0 DUP8 DUP3 DUP9 ADD PUSH2 0x115 JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MLOAD SWAP1 SWAP6 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x20E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21A DUP8 DUP3 DUP9 ADD PUSH2 0x115 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x231 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 PUSH2 0x24E 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 PUSH2 0x26D JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x28D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x2DD JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x2BA JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2C6 JUMP JUMPDEST POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2FB JUMPI PUSH2 0x2FB PUSH2 0xFF JUMP JUMPDEST PUSH2 0x30F DUP2 PUSH2 0x309 DUP5 SLOAD PUSH2 0x259 JUMP JUMPDEST DUP5 PUSH2 0x293 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 DUP2 EQ PUSH2 0x343 JUMPI PUSH1 0x0 DUP4 ISZERO PUSH2 0x32B JUMPI POP DUP5 DUP3 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP6 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP5 SWAP1 SHL OR DUP5 SSTORE PUSH2 0x2DA JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP6 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x373 JUMPI DUP8 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x353 JUMP JUMPDEST POP DUP5 DUP3 LT ISZERO PUSH2 0x391 JUMPI DUP7 DUP5 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP8 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0xBC3 DUP1 PUSH2 0x3AF 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 0xF5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0x9DC29FAC GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x221 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x25A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1D0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1D8 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x160 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0x68573107 EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x118 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x13B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x102 PUSH2 0x26D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10F SWAP2 SWAP1 PUSH2 0x855 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x12B PUSH2 0x126 CALLDATASIZE PUSH1 0x4 PUSH2 0x8BF JUMP JUMPDEST PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10F JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10F JUMP JUMPDEST PUSH2 0x12B PUSH2 0x15B CALLDATASIZE PUSH1 0x4 PUSH2 0x8E9 JUMP JUMPDEST PUSH2 0x319 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10F JUMP JUMPDEST PUSH2 0x192 PUSH2 0x18D CALLDATASIZE PUSH1 0x4 PUSH2 0x8BF JUMP JUMPDEST PUSH2 0x33D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x192 PUSH2 0x1A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x9FE JUMP JUMPDEST PUSH2 0x353 JUMP JUMPDEST PUSH2 0x13F PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x192 PUSH2 0x3FF JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10F JUMP JUMPDEST PUSH2 0x102 PUSH2 0x413 JUMP JUMPDEST PUSH2 0x192 PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0x8BF JUMP JUMPDEST PUSH2 0x422 JUMP JUMPDEST PUSH2 0x12B PUSH2 0x21C CALLDATASIZE PUSH1 0x4 PUSH2 0x8BF JUMP JUMPDEST PUSH2 0x434 JUMP JUMPDEST PUSH2 0x13F PUSH2 0x22F CALLDATASIZE PUSH1 0x4 PUSH2 0xAE9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x192 PUSH2 0x268 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC7 JUMP JUMPDEST PUSH2 0x442 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x27C SWAP1 PUSH2 0xB1C 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 0x2A8 SWAP1 PUSH2 0xB1C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2F5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2CA JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2F5 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 0x2D8 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x30D DUP2 DUP6 DUP6 PUSH2 0x480 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x327 DUP6 DUP3 DUP6 PUSH2 0x48D JUMP JUMPDEST PUSH2 0x332 DUP6 DUP6 DUP6 PUSH2 0x50C JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x345 PUSH2 0x56B JUMP JUMPDEST PUSH2 0x34F DUP3 DUP3 PUSH2 0x598 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x35B PUSH2 0x56B JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH2 0x3AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x82E4E4C2F2E640D8CADCCEE8D040DAD2E6DAC2E8C6D PUSH1 0x53 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x3FA JUMPI PUSH2 0x3F2 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3CB JUMPI PUSH2 0x3CB PUSH2 0xB56 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3E5 JUMPI PUSH2 0x3E5 PUSH2 0xB56 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x598 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3AD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x407 PUSH2 0x56B JUMP JUMPDEST PUSH2 0x411 PUSH1 0x0 PUSH2 0x5CE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x27C SWAP1 PUSH2 0xB1C JUMP JUMPDEST PUSH2 0x42A PUSH2 0x56B JUMP JUMPDEST PUSH2 0x34F DUP3 DUP3 PUSH2 0x620 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x30D DUP2 DUP6 DUP6 PUSH2 0x50C JUMP JUMPDEST PUSH2 0x44A PUSH2 0x56B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x474 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x47D DUP2 PUSH2 0x5CE JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x3FA DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x656 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0x0 NOT DUP2 LT ISZERO PUSH2 0x506 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x4F7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7DC7A0D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x506 DUP5 DUP5 DUP5 DUP5 SUB PUSH1 0x0 PUSH2 0x656 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x536 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x560 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x3FA DUP4 DUP4 DUP4 PUSH2 0x72B JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x411 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5C2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x34F PUSH1 0x0 DUP4 DUP4 PUSH2 0x72B JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x64A JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x34F DUP3 PUSH1 0x0 DUP4 PUSH2 0x72B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x680 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE602DF05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6AA JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A1406B1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x506 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 PUSH1 0x40 MLOAD PUSH2 0x71D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x756 JUMPI DUP1 PUSH1 0x2 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x74B SWAP2 SWAP1 PUSH2 0xB6C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x7C8 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x7A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x391434E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP3 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7E4 JUMPI PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 SUB SWAP1 SSTORE PUSH2 0x803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 ADD SWAP1 SSTORE JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x848 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x883 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD PUSH1 0x40 DUP7 DUP5 ADD ADD MSTORE ADD PUSH2 0x866 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP6 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x8BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8DB DUP4 PUSH2 0x8A3 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 0x8FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x907 DUP5 PUSH2 0x8A3 JUMP JUMPDEST SWAP3 POP PUSH2 0x915 PUSH1 0x20 DUP6 ADD PUSH2 0x8A3 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x965 JUMPI PUSH2 0x965 PUSH2 0x926 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x987 JUMPI PUSH2 0x987 PUSH2 0x926 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x9A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x9B5 PUSH2 0x9B0 DUP3 PUSH2 0x96D JUMP JUMPDEST PUSH2 0x93C JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP DUP6 DUP4 GT ISZERO PUSH2 0x9D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9F4 JUMPI DUP1 CALLDATALOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x9DC JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xA11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xA47 PUSH2 0x9B0 DUP3 PUSH2 0x96D JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 DUP4 GT ISZERO PUSH2 0xA69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP5 ADD SWAP4 POP JUMPDEST DUP3 DUP5 LT ISZERO PUSH2 0xA92 JUMPI PUSH2 0xA81 DUP5 PUSH2 0x8A3 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xA70 JUMP JUMPDEST SWAP5 POP POP POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xABD DUP6 DUP3 DUP7 ADD PUSH2 0x991 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAE2 DUP3 PUSH2 0x8A3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB05 DUP4 PUSH2 0x8A3 JUMP JUMPDEST SWAP2 POP PUSH2 0xB13 PUSH1 0x20 DUP5 ADD PUSH2 0x8A3 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xB30 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xB50 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x313 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE1 0x29 SIGNEXTEND SWAP7 0xE5 PUSH32 0x4ACC109D889A1D12169BEF2020982F3FB3256DE6C0F120A1FF0164736F6C6343 STOP ADDMOD SHR STOP CALLER ","sourceMap":"246:1498:6:-:0;;;319:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;478:12;456:4;462:6;1648:5:2;:13;456:4:6;1648:5:2;:13;:::i;:::-;-1:-1:-1;1671:7:2;:17;1681:7;1671;:17;:::i;:::-;-1:-1:-1;;;;;;;;1273:26:0;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:0;;1350:1;1322:31;;;4528:51:7;4501:18;;1322:31:0;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;502:9:6::2;:21:::0;;::::2;::::0;;::::2;-1:-1:-1::0;;;502:21:6::2;-1:-1:-1::0;;;;502:21:6;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;246:1498:6;;-1:-1:-1;246:1498:6;2912:187:0;3004:6;;;-1:-1:-1;;;;;3020:17:0;;;-1:-1:-1;;;;;;3020:17:0;;;;;;;3052:40;;3004:6;;;3020:17;3004:6;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;14:127:7:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:834;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;298:13;;-1:-1:-1;;;;;323:30:7;;320:56;;;356:18;;:::i;:::-;405:2;399:9;497:2;459:17;;-1:-1:-1;;455:31:7;;;488:2;451:40;447:54;435:67;;-1:-1:-1;;;;;517:34:7;;553:22;;;514:62;511:88;;;579:18;;:::i;:::-;615:2;608:22;639;;;680:19;;;701:4;676:30;673:39;-1:-1:-1;670:59:7;;;725:1;722;715:12;670:59;747:1;757:143;771:6;768:1;765:13;757:143;;;883:4;867:14;;;863:25;;857:32;834:14;;;830:25;;823:67;786:12;757:143;;;-1:-1:-1;948:1:7;920:19;;;941:4;916:30;909:41;;;;924:6;146:834;-1:-1:-1;;;146:834:7:o;985:883::-;1100:6;1108;1116;1124;1177:3;1165:9;1156:7;1152:23;1148:33;1145:53;;;1194:1;1191;1184:12;1145:53;1221:16;;-1:-1:-1;;;;;1249:30:7;;1246:50;;;1292:1;1289;1282:12;1246:50;1315:61;1368:7;1359:6;1348:9;1344:22;1315:61;:::i;:::-;1422:2;1407:18;;1401:25;1305:71;;-1:-1:-1;1401:25:7;-1:-1:-1;;;;;;1438:32:7;;1435:52;;;1483:1;1480;1473:12;1435:52;1506:63;1561:7;1550:8;1539:9;1535:24;1506:63;:::i;:::-;1496:73;;;1612:2;1601:9;1597:18;1591:25;1656:4;1649:5;1645:16;1638:5;1635:27;1625:55;;1676:1;1673;1666:12;1625:55;1749:2;1734:18;;1728:25;1699:5;;-1:-1:-1;;;;;;1784:33:7;;1772:46;;1762:74;;1832:1;1829;1822:12;1762:74;985:883;;;;-1:-1:-1;985:883:7;;-1:-1:-1;;985:883:7:o;1873:380::-;1952:1;1948:12;;;;1995;;;2016:61;;2070:4;2062:6;2058:17;2048:27;;2016:61;2123:2;2115:6;2112:14;2092:18;2089:38;2086:161;;2169:10;2164:3;2160:20;2157:1;2150:31;2204:4;2201:1;2194:15;2232:4;2229:1;2222:15;2086:161;;1873:380;;;:::o;2384:518::-;2486:2;2481:3;2478:11;2475:421;;;2522:5;2519:1;2512:16;2566:4;2563:1;2553:18;2636:2;2624:10;2620:19;2617:1;2613:27;2607:4;2603:38;2672:4;2660:10;2657:20;2654:47;;;-1:-1:-1;2695:4:7;2654:47;2750:2;2745:3;2741:12;2738:1;2734:20;2728:4;2724:31;2714:41;;2805:81;2823:2;2816:5;2813:13;2805:81;;;2882:1;2868:16;;2849:1;2838:13;2805:81;;;2809:3;;2475:421;2384:518;;;:::o;3078:1299::-;3198:10;;-1:-1:-1;;;;;3220:30:7;;3217:56;;;3253:18;;:::i;:::-;3282:97;3372:6;3332:38;3364:4;3358:11;3332:38;:::i;:::-;3326:4;3282:97;:::i;:::-;3428:4;3459:2;3448:14;;3476:1;3471:649;;;;4164:1;4181:6;4178:89;;;-1:-1:-1;4233:19:7;;;4227:26;4178:89;-1:-1:-1;;3035:1:7;3031:11;;;3027:24;3023:29;3013:40;3059:1;3055:11;;;3010:57;4280:81;;3441:930;;3471:649;2331:1;2324:14;;;2368:4;2355:18;;-1:-1:-1;;3507:20:7;;;3625:222;3639:7;3636:1;3633:14;3625:222;;;3721:19;;;3715:26;3700:42;;3828:4;3813:20;;;;3781:1;3769:14;;;;3655:12;3625:222;;;3629:3;3875:6;3866:7;3863:19;3860:201;;;3936:19;;;3930:26;-1:-1:-1;;4019:1:7;4015:14;;;4031:3;4011:24;4007:37;4003:42;3988:58;3973:74;;3860:201;-1:-1:-1;;;;4107:1:7;4091:14;;;4087:22;4074:36;;-1:-1:-1;3078:1299:7:o;4382:203::-;246:1498:6;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_approve_690":{"entryPoint":1152,"id":690,"parameterSlots":3,"returnSlots":0},"@_approve_750":{"entryPoint":1622,"id":750,"parameterSlots":4,"returnSlots":0},"@_burn_672":{"entryPoint":1568,"id":672,"parameterSlots":2,"returnSlots":0},"@_checkOwner_84":{"entryPoint":1387,"id":84,"parameterSlots":0,"returnSlots":0},"@_mint_639":{"entryPoint":1432,"id":639,"parameterSlots":2,"returnSlots":0},"@_msgSender_915":{"entryPoint":null,"id":915,"parameterSlots":0,"returnSlots":1},"@_spendAllowance_798":{"entryPoint":1165,"id":798,"parameterSlots":3,"returnSlots":0},"@_transferOwnership_146":{"entryPoint":1486,"id":146,"parameterSlots":1,"returnSlots":0},"@_transfer_529":{"entryPoint":1292,"id":529,"parameterSlots":3,"returnSlots":0},"@_update_606":{"entryPoint":1835,"id":606,"parameterSlots":3,"returnSlots":0},"@allowance_426":{"entryPoint":null,"id":426,"parameterSlots":2,"returnSlots":1},"@approve_450":{"entryPoint":767,"id":450,"parameterSlots":2,"returnSlots":1},"@balanceOf_385":{"entryPoint":null,"id":385,"parameterSlots":1,"returnSlots":1},"@batchMint_1053":{"entryPoint":851,"id":1053,"parameterSlots":2,"returnSlots":0},"@burn_1009":{"entryPoint":1058,"id":1009,"parameterSlots":2,"returnSlots":0},"@decimals_977":{"entryPoint":null,"id":977,"parameterSlots":0,"returnSlots":1},"@mint_993":{"entryPoint":829,"id":993,"parameterSlots":2,"returnSlots":0},"@name_345":{"entryPoint":621,"id":345,"parameterSlots":0,"returnSlots":1},"@owner_67":{"entryPoint":null,"id":67,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_98":{"entryPoint":1023,"id":98,"parameterSlots":0,"returnSlots":0},"@symbol_354":{"entryPoint":1043,"id":354,"parameterSlots":0,"returnSlots":1},"@totalSupply_372":{"entryPoint":null,"id":372,"parameterSlots":0,"returnSlots":1},"@transferFrom_482":{"entryPoint":793,"id":482,"parameterSlots":3,"returnSlots":1},"@transferOwnership_126":{"entryPoint":1090,"id":126,"parameterSlots":1,"returnSlots":0},"@transfer_409":{"entryPoint":1076,"id":409,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":2211,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":2449,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2759,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":2793,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":2281,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":2239,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":2558,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2133,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_582fd48f3876d7686bfeaaaa0db0589073271dedd50d66094f02fee2a3d2e01c__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},"allocate_memory":{"entryPoint":2364,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":2413,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":2924,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":2844,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":2902,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":2342,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:6556:7","nodeType":"YulBlock","src":"0:6556:7","statements":[{"nativeSrc":"6:3:7","nodeType":"YulBlock","src":"6:3:7","statements":[]},{"body":{"nativeSrc":"135:406:7","nodeType":"YulBlock","src":"135:406:7","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"152:9:7","nodeType":"YulIdentifier","src":"152:9:7"},{"kind":"number","nativeSrc":"163:2:7","nodeType":"YulLiteral","src":"163:2:7","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"145:6:7","nodeType":"YulIdentifier","src":"145:6:7"},"nativeSrc":"145:21:7","nodeType":"YulFunctionCall","src":"145:21:7"},"nativeSrc":"145:21:7","nodeType":"YulExpressionStatement","src":"145:21:7"},{"nativeSrc":"175:27:7","nodeType":"YulVariableDeclaration","src":"175:27:7","value":{"arguments":[{"name":"value0","nativeSrc":"195:6:7","nodeType":"YulIdentifier","src":"195:6:7"}],"functionName":{"name":"mload","nativeSrc":"189:5:7","nodeType":"YulIdentifier","src":"189:5:7"},"nativeSrc":"189:13:7","nodeType":"YulFunctionCall","src":"189:13:7"},"variables":[{"name":"length","nativeSrc":"179:6:7","nodeType":"YulTypedName","src":"179:6:7","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"222:9:7","nodeType":"YulIdentifier","src":"222:9:7"},{"kind":"number","nativeSrc":"233:2:7","nodeType":"YulLiteral","src":"233:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"218:3:7","nodeType":"YulIdentifier","src":"218:3:7"},"nativeSrc":"218:18:7","nodeType":"YulFunctionCall","src":"218:18:7"},{"name":"length","nativeSrc":"238:6:7","nodeType":"YulIdentifier","src":"238:6:7"}],"functionName":{"name":"mstore","nativeSrc":"211:6:7","nodeType":"YulIdentifier","src":"211:6:7"},"nativeSrc":"211:34:7","nodeType":"YulFunctionCall","src":"211:34:7"},"nativeSrc":"211:34:7","nodeType":"YulExpressionStatement","src":"211:34:7"},{"nativeSrc":"254:10:7","nodeType":"YulVariableDeclaration","src":"254:10:7","value":{"kind":"number","nativeSrc":"263:1:7","nodeType":"YulLiteral","src":"263:1:7","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"258:1:7","nodeType":"YulTypedName","src":"258:1:7","type":""}]},{"body":{"nativeSrc":"323:90:7","nodeType":"YulBlock","src":"323:90:7","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"352:9:7","nodeType":"YulIdentifier","src":"352:9:7"},{"name":"i","nativeSrc":"363:1:7","nodeType":"YulIdentifier","src":"363:1:7"}],"functionName":{"name":"add","nativeSrc":"348:3:7","nodeType":"YulIdentifier","src":"348:3:7"},"nativeSrc":"348:17:7","nodeType":"YulFunctionCall","src":"348:17:7"},{"kind":"number","nativeSrc":"367:2:7","nodeType":"YulLiteral","src":"367:2:7","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"344:3:7","nodeType":"YulIdentifier","src":"344:3:7"},"nativeSrc":"344:26:7","nodeType":"YulFunctionCall","src":"344:26:7"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"386:6:7","nodeType":"YulIdentifier","src":"386:6:7"},{"name":"i","nativeSrc":"394:1:7","nodeType":"YulIdentifier","src":"394:1:7"}],"functionName":{"name":"add","nativeSrc":"382:3:7","nodeType":"YulIdentifier","src":"382:3:7"},"nativeSrc":"382:14:7","nodeType":"YulFunctionCall","src":"382:14:7"},{"kind":"number","nativeSrc":"398:2:7","nodeType":"YulLiteral","src":"398:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"378:3:7","nodeType":"YulIdentifier","src":"378:3:7"},"nativeSrc":"378:23:7","nodeType":"YulFunctionCall","src":"378:23:7"}],"functionName":{"name":"mload","nativeSrc":"372:5:7","nodeType":"YulIdentifier","src":"372:5:7"},"nativeSrc":"372:30:7","nodeType":"YulFunctionCall","src":"372:30:7"}],"functionName":{"name":"mstore","nativeSrc":"337:6:7","nodeType":"YulIdentifier","src":"337:6:7"},"nativeSrc":"337:66:7","nodeType":"YulFunctionCall","src":"337:66:7"},"nativeSrc":"337:66:7","nodeType":"YulExpressionStatement","src":"337:66:7"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"284:1:7","nodeType":"YulIdentifier","src":"284:1:7"},{"name":"length","nativeSrc":"287:6:7","nodeType":"YulIdentifier","src":"287:6:7"}],"functionName":{"name":"lt","nativeSrc":"281:2:7","nodeType":"YulIdentifier","src":"281:2:7"},"nativeSrc":"281:13:7","nodeType":"YulFunctionCall","src":"281:13:7"},"nativeSrc":"273:140:7","nodeType":"YulForLoop","post":{"nativeSrc":"295:19:7","nodeType":"YulBlock","src":"295:19:7","statements":[{"nativeSrc":"297:15:7","nodeType":"YulAssignment","src":"297:15:7","value":{"arguments":[{"name":"i","nativeSrc":"306:1:7","nodeType":"YulIdentifier","src":"306:1:7"},{"kind":"number","nativeSrc":"309:2:7","nodeType":"YulLiteral","src":"309:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"302:3:7","nodeType":"YulIdentifier","src":"302:3:7"},"nativeSrc":"302:10:7","nodeType":"YulFunctionCall","src":"302:10:7"},"variableNames":[{"name":"i","nativeSrc":"297:1:7","nodeType":"YulIdentifier","src":"297:1:7"}]}]},"pre":{"nativeSrc":"277:3:7","nodeType":"YulBlock","src":"277:3:7","statements":[]},"src":"273:140:7"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"437:9:7","nodeType":"YulIdentifier","src":"437:9:7"},{"name":"length","nativeSrc":"448:6:7","nodeType":"YulIdentifier","src":"448:6:7"}],"functionName":{"name":"add","nativeSrc":"433:3:7","nodeType":"YulIdentifier","src":"433:3:7"},"nativeSrc":"433:22:7","nodeType":"YulFunctionCall","src":"433:22:7"},{"kind":"number","nativeSrc":"457:2:7","nodeType":"YulLiteral","src":"457:2:7","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"429:3:7","nodeType":"YulIdentifier","src":"429:3:7"},"nativeSrc":"429:31:7","nodeType":"YulFunctionCall","src":"429:31:7"},{"kind":"number","nativeSrc":"462:1:7","nodeType":"YulLiteral","src":"462:1:7","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"422:6:7","nodeType":"YulIdentifier","src":"422:6:7"},"nativeSrc":"422:42:7","nodeType":"YulFunctionCall","src":"422:42:7"},"nativeSrc":"422:42:7","nodeType":"YulExpressionStatement","src":"422:42:7"},{"nativeSrc":"473:62:7","nodeType":"YulAssignment","src":"473:62:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"489:9:7","nodeType":"YulIdentifier","src":"489:9:7"},{"arguments":[{"arguments":[{"name":"length","nativeSrc":"508:6:7","nodeType":"YulIdentifier","src":"508:6:7"},{"kind":"number","nativeSrc":"516:2:7","nodeType":"YulLiteral","src":"516:2:7","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"504:3:7","nodeType":"YulIdentifier","src":"504:3:7"},"nativeSrc":"504:15:7","nodeType":"YulFunctionCall","src":"504:15:7"},{"arguments":[{"kind":"number","nativeSrc":"525:2:7","nodeType":"YulLiteral","src":"525:2:7","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"521:3:7","nodeType":"YulIdentifier","src":"521:3:7"},"nativeSrc":"521:7:7","nodeType":"YulFunctionCall","src":"521:7:7"}],"functionName":{"name":"and","nativeSrc":"500:3:7","nodeType":"YulIdentifier","src":"500:3:7"},"nativeSrc":"500:29:7","nodeType":"YulFunctionCall","src":"500:29:7"}],"functionName":{"name":"add","nativeSrc":"485:3:7","nodeType":"YulIdentifier","src":"485:3:7"},"nativeSrc":"485:45:7","nodeType":"YulFunctionCall","src":"485:45:7"},{"kind":"number","nativeSrc":"532:2:7","nodeType":"YulLiteral","src":"532:2:7","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"481:3:7","nodeType":"YulIdentifier","src":"481:3:7"},"nativeSrc":"481:54:7","nodeType":"YulFunctionCall","src":"481:54:7"},"variableNames":[{"name":"tail","nativeSrc":"473:4:7","nodeType":"YulIdentifier","src":"473:4:7"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"14:527:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"104:9:7","nodeType":"YulTypedName","src":"104:9:7","type":""},{"name":"value0","nativeSrc":"115:6:7","nodeType":"YulTypedName","src":"115:6:7","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"126:4:7","nodeType":"YulTypedName","src":"126:4:7","type":""}],"src":"14:527:7"},{"body":{"nativeSrc":"595:124:7","nodeType":"YulBlock","src":"595:124:7","statements":[{"nativeSrc":"605:29:7","nodeType":"YulAssignment","src":"605:29:7","value":{"arguments":[{"name":"offset","nativeSrc":"627:6:7","nodeType":"YulIdentifier","src":"627:6:7"}],"functionName":{"name":"calldataload","nativeSrc":"614:12:7","nodeType":"YulIdentifier","src":"614:12:7"},"nativeSrc":"614:20:7","nodeType":"YulFunctionCall","src":"614:20:7"},"variableNames":[{"name":"value","nativeSrc":"605:5:7","nodeType":"YulIdentifier","src":"605:5:7"}]},{"body":{"nativeSrc":"697:16:7","nodeType":"YulBlock","src":"697:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"706:1:7","nodeType":"YulLiteral","src":"706:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"709:1:7","nodeType":"YulLiteral","src":"709:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"699:6:7","nodeType":"YulIdentifier","src":"699:6:7"},"nativeSrc":"699:12:7","nodeType":"YulFunctionCall","src":"699:12:7"},"nativeSrc":"699:12:7","nodeType":"YulExpressionStatement","src":"699:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"656:5:7","nodeType":"YulIdentifier","src":"656:5:7"},{"arguments":[{"name":"value","nativeSrc":"667:5:7","nodeType":"YulIdentifier","src":"667:5:7"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"682:3:7","nodeType":"YulLiteral","src":"682:3:7","type":"","value":"160"},{"kind":"number","nativeSrc":"687:1:7","nodeType":"YulLiteral","src":"687:1:7","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"678:3:7","nodeType":"YulIdentifier","src":"678:3:7"},"nativeSrc":"678:11:7","nodeType":"YulFunctionCall","src":"678:11:7"},{"kind":"number","nativeSrc":"691:1:7","nodeType":"YulLiteral","src":"691:1:7","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"674:3:7","nodeType":"YulIdentifier","src":"674:3:7"},"nativeSrc":"674:19:7","nodeType":"YulFunctionCall","src":"674:19:7"}],"functionName":{"name":"and","nativeSrc":"663:3:7","nodeType":"YulIdentifier","src":"663:3:7"},"nativeSrc":"663:31:7","nodeType":"YulFunctionCall","src":"663:31:7"}],"functionName":{"name":"eq","nativeSrc":"653:2:7","nodeType":"YulIdentifier","src":"653:2:7"},"nativeSrc":"653:42:7","nodeType":"YulFunctionCall","src":"653:42:7"}],"functionName":{"name":"iszero","nativeSrc":"646:6:7","nodeType":"YulIdentifier","src":"646:6:7"},"nativeSrc":"646:50:7","nodeType":"YulFunctionCall","src":"646:50:7"},"nativeSrc":"643:70:7","nodeType":"YulIf","src":"643:70:7"}]},"name":"abi_decode_address","nativeSrc":"546:173:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"574:6:7","nodeType":"YulTypedName","src":"574:6:7","type":""}],"returnVariables":[{"name":"value","nativeSrc":"585:5:7","nodeType":"YulTypedName","src":"585:5:7","type":""}],"src":"546:173:7"},{"body":{"nativeSrc":"811:213:7","nodeType":"YulBlock","src":"811:213:7","statements":[{"body":{"nativeSrc":"857:16:7","nodeType":"YulBlock","src":"857:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"866:1:7","nodeType":"YulLiteral","src":"866:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"869:1:7","nodeType":"YulLiteral","src":"869:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"859:6:7","nodeType":"YulIdentifier","src":"859:6:7"},"nativeSrc":"859:12:7","nodeType":"YulFunctionCall","src":"859:12:7"},"nativeSrc":"859:12:7","nodeType":"YulExpressionStatement","src":"859:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"832:7:7","nodeType":"YulIdentifier","src":"832:7:7"},{"name":"headStart","nativeSrc":"841:9:7","nodeType":"YulIdentifier","src":"841:9:7"}],"functionName":{"name":"sub","nativeSrc":"828:3:7","nodeType":"YulIdentifier","src":"828:3:7"},"nativeSrc":"828:23:7","nodeType":"YulFunctionCall","src":"828:23:7"},{"kind":"number","nativeSrc":"853:2:7","nodeType":"YulLiteral","src":"853:2:7","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"824:3:7","nodeType":"YulIdentifier","src":"824:3:7"},"nativeSrc":"824:32:7","nodeType":"YulFunctionCall","src":"824:32:7"},"nativeSrc":"821:52:7","nodeType":"YulIf","src":"821:52:7"},{"nativeSrc":"882:39:7","nodeType":"YulAssignment","src":"882:39:7","value":{"arguments":[{"name":"headStart","nativeSrc":"911:9:7","nodeType":"YulIdentifier","src":"911:9:7"}],"functionName":{"name":"abi_decode_address","nativeSrc":"892:18:7","nodeType":"YulIdentifier","src":"892:18:7"},"nativeSrc":"892:29:7","nodeType":"YulFunctionCall","src":"892:29:7"},"variableNames":[{"name":"value0","nativeSrc":"882:6:7","nodeType":"YulIdentifier","src":"882:6:7"}]},{"nativeSrc":"930:14:7","nodeType":"YulVariableDeclaration","src":"930:14:7","value":{"kind":"number","nativeSrc":"943:1:7","nodeType":"YulLiteral","src":"943:1:7","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"934:5:7","nodeType":"YulTypedName","src":"934:5:7","type":""}]},{"nativeSrc":"953:41:7","nodeType":"YulAssignment","src":"953:41:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"979:9:7","nodeType":"YulIdentifier","src":"979:9:7"},{"kind":"number","nativeSrc":"990:2:7","nodeType":"YulLiteral","src":"990:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"975:3:7","nodeType":"YulIdentifier","src":"975:3:7"},"nativeSrc":"975:18:7","nodeType":"YulFunctionCall","src":"975:18:7"}],"functionName":{"name":"calldataload","nativeSrc":"962:12:7","nodeType":"YulIdentifier","src":"962:12:7"},"nativeSrc":"962:32:7","nodeType":"YulFunctionCall","src":"962:32:7"},"variableNames":[{"name":"value","nativeSrc":"953:5:7","nodeType":"YulIdentifier","src":"953:5:7"}]},{"nativeSrc":"1003:15:7","nodeType":"YulAssignment","src":"1003:15:7","value":{"name":"value","nativeSrc":"1013:5:7","nodeType":"YulIdentifier","src":"1013:5:7"},"variableNames":[{"name":"value1","nativeSrc":"1003:6:7","nodeType":"YulIdentifier","src":"1003:6:7"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nativeSrc":"724:300:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"769:9:7","nodeType":"YulTypedName","src":"769:9:7","type":""},{"name":"dataEnd","nativeSrc":"780:7:7","nodeType":"YulTypedName","src":"780:7:7","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"792:6:7","nodeType":"YulTypedName","src":"792:6:7","type":""},{"name":"value1","nativeSrc":"800:6:7","nodeType":"YulTypedName","src":"800:6:7","type":""}],"src":"724:300:7"},{"body":{"nativeSrc":"1124:92:7","nodeType":"YulBlock","src":"1124:92:7","statements":[{"nativeSrc":"1134:26:7","nodeType":"YulAssignment","src":"1134:26:7","value":{"arguments":[{"name":"headStart","nativeSrc":"1146:9:7","nodeType":"YulIdentifier","src":"1146:9:7"},{"kind":"number","nativeSrc":"1157:2:7","nodeType":"YulLiteral","src":"1157:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1142:3:7","nodeType":"YulIdentifier","src":"1142:3:7"},"nativeSrc":"1142:18:7","nodeType":"YulFunctionCall","src":"1142:18:7"},"variableNames":[{"name":"tail","nativeSrc":"1134:4:7","nodeType":"YulIdentifier","src":"1134:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1176:9:7","nodeType":"YulIdentifier","src":"1176:9:7"},{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"1201:6:7","nodeType":"YulIdentifier","src":"1201:6:7"}],"functionName":{"name":"iszero","nativeSrc":"1194:6:7","nodeType":"YulIdentifier","src":"1194:6:7"},"nativeSrc":"1194:14:7","nodeType":"YulFunctionCall","src":"1194:14:7"}],"functionName":{"name":"iszero","nativeSrc":"1187:6:7","nodeType":"YulIdentifier","src":"1187:6:7"},"nativeSrc":"1187:22:7","nodeType":"YulFunctionCall","src":"1187:22:7"}],"functionName":{"name":"mstore","nativeSrc":"1169:6:7","nodeType":"YulIdentifier","src":"1169:6:7"},"nativeSrc":"1169:41:7","nodeType":"YulFunctionCall","src":"1169:41:7"},"nativeSrc":"1169:41:7","nodeType":"YulExpressionStatement","src":"1169:41:7"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"1029:187:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1093:9:7","nodeType":"YulTypedName","src":"1093:9:7","type":""},{"name":"value0","nativeSrc":"1104:6:7","nodeType":"YulTypedName","src":"1104:6:7","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1115:4:7","nodeType":"YulTypedName","src":"1115:4:7","type":""}],"src":"1029:187:7"},{"body":{"nativeSrc":"1322:76:7","nodeType":"YulBlock","src":"1322:76:7","statements":[{"nativeSrc":"1332:26:7","nodeType":"YulAssignment","src":"1332:26:7","value":{"arguments":[{"name":"headStart","nativeSrc":"1344:9:7","nodeType":"YulIdentifier","src":"1344:9:7"},{"kind":"number","nativeSrc":"1355:2:7","nodeType":"YulLiteral","src":"1355:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1340:3:7","nodeType":"YulIdentifier","src":"1340:3:7"},"nativeSrc":"1340:18:7","nodeType":"YulFunctionCall","src":"1340:18:7"},"variableNames":[{"name":"tail","nativeSrc":"1332:4:7","nodeType":"YulIdentifier","src":"1332:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1374:9:7","nodeType":"YulIdentifier","src":"1374:9:7"},{"name":"value0","nativeSrc":"1385:6:7","nodeType":"YulIdentifier","src":"1385:6:7"}],"functionName":{"name":"mstore","nativeSrc":"1367:6:7","nodeType":"YulIdentifier","src":"1367:6:7"},"nativeSrc":"1367:25:7","nodeType":"YulFunctionCall","src":"1367:25:7"},"nativeSrc":"1367:25:7","nodeType":"YulExpressionStatement","src":"1367:25:7"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"1221:177:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1291:9:7","nodeType":"YulTypedName","src":"1291:9:7","type":""},{"name":"value0","nativeSrc":"1302:6:7","nodeType":"YulTypedName","src":"1302:6:7","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1313:4:7","nodeType":"YulTypedName","src":"1313:4:7","type":""}],"src":"1221:177:7"},{"body":{"nativeSrc":"1507:270:7","nodeType":"YulBlock","src":"1507:270:7","statements":[{"body":{"nativeSrc":"1553:16:7","nodeType":"YulBlock","src":"1553:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1562:1:7","nodeType":"YulLiteral","src":"1562:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"1565:1:7","nodeType":"YulLiteral","src":"1565:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1555:6:7","nodeType":"YulIdentifier","src":"1555:6:7"},"nativeSrc":"1555:12:7","nodeType":"YulFunctionCall","src":"1555:12:7"},"nativeSrc":"1555:12:7","nodeType":"YulExpressionStatement","src":"1555:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1528:7:7","nodeType":"YulIdentifier","src":"1528:7:7"},{"name":"headStart","nativeSrc":"1537:9:7","nodeType":"YulIdentifier","src":"1537:9:7"}],"functionName":{"name":"sub","nativeSrc":"1524:3:7","nodeType":"YulIdentifier","src":"1524:3:7"},"nativeSrc":"1524:23:7","nodeType":"YulFunctionCall","src":"1524:23:7"},{"kind":"number","nativeSrc":"1549:2:7","nodeType":"YulLiteral","src":"1549:2:7","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"1520:3:7","nodeType":"YulIdentifier","src":"1520:3:7"},"nativeSrc":"1520:32:7","nodeType":"YulFunctionCall","src":"1520:32:7"},"nativeSrc":"1517:52:7","nodeType":"YulIf","src":"1517:52:7"},{"nativeSrc":"1578:39:7","nodeType":"YulAssignment","src":"1578:39:7","value":{"arguments":[{"name":"headStart","nativeSrc":"1607:9:7","nodeType":"YulIdentifier","src":"1607:9:7"}],"functionName":{"name":"abi_decode_address","nativeSrc":"1588:18:7","nodeType":"YulIdentifier","src":"1588:18:7"},"nativeSrc":"1588:29:7","nodeType":"YulFunctionCall","src":"1588:29:7"},"variableNames":[{"name":"value0","nativeSrc":"1578:6:7","nodeType":"YulIdentifier","src":"1578:6:7"}]},{"nativeSrc":"1626:48:7","nodeType":"YulAssignment","src":"1626:48:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1659:9:7","nodeType":"YulIdentifier","src":"1659:9:7"},{"kind":"number","nativeSrc":"1670:2:7","nodeType":"YulLiteral","src":"1670:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1655:3:7","nodeType":"YulIdentifier","src":"1655:3:7"},"nativeSrc":"1655:18:7","nodeType":"YulFunctionCall","src":"1655:18:7"}],"functionName":{"name":"abi_decode_address","nativeSrc":"1636:18:7","nodeType":"YulIdentifier","src":"1636:18:7"},"nativeSrc":"1636:38:7","nodeType":"YulFunctionCall","src":"1636:38:7"},"variableNames":[{"name":"value1","nativeSrc":"1626:6:7","nodeType":"YulIdentifier","src":"1626:6:7"}]},{"nativeSrc":"1683:14:7","nodeType":"YulVariableDeclaration","src":"1683:14:7","value":{"kind":"number","nativeSrc":"1696:1:7","nodeType":"YulLiteral","src":"1696:1:7","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"1687:5:7","nodeType":"YulTypedName","src":"1687:5:7","type":""}]},{"nativeSrc":"1706:41:7","nodeType":"YulAssignment","src":"1706:41:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1732:9:7","nodeType":"YulIdentifier","src":"1732:9:7"},{"kind":"number","nativeSrc":"1743:2:7","nodeType":"YulLiteral","src":"1743:2:7","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"1728:3:7","nodeType":"YulIdentifier","src":"1728:3:7"},"nativeSrc":"1728:18:7","nodeType":"YulFunctionCall","src":"1728:18:7"}],"functionName":{"name":"calldataload","nativeSrc":"1715:12:7","nodeType":"YulIdentifier","src":"1715:12:7"},"nativeSrc":"1715:32:7","nodeType":"YulFunctionCall","src":"1715:32:7"},"variableNames":[{"name":"value","nativeSrc":"1706:5:7","nodeType":"YulIdentifier","src":"1706:5:7"}]},{"nativeSrc":"1756:15:7","nodeType":"YulAssignment","src":"1756:15:7","value":{"name":"value","nativeSrc":"1766:5:7","nodeType":"YulIdentifier","src":"1766:5:7"},"variableNames":[{"name":"value2","nativeSrc":"1756:6:7","nodeType":"YulIdentifier","src":"1756:6:7"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nativeSrc":"1403:374:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1457:9:7","nodeType":"YulTypedName","src":"1457:9:7","type":""},{"name":"dataEnd","nativeSrc":"1468:7:7","nodeType":"YulTypedName","src":"1468:7:7","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1480:6:7","nodeType":"YulTypedName","src":"1480:6:7","type":""},{"name":"value1","nativeSrc":"1488:6:7","nodeType":"YulTypedName","src":"1488:6:7","type":""},{"name":"value2","nativeSrc":"1496:6:7","nodeType":"YulTypedName","src":"1496:6:7","type":""}],"src":"1403:374:7"},{"body":{"nativeSrc":"1879:87:7","nodeType":"YulBlock","src":"1879:87:7","statements":[{"nativeSrc":"1889:26:7","nodeType":"YulAssignment","src":"1889:26:7","value":{"arguments":[{"name":"headStart","nativeSrc":"1901:9:7","nodeType":"YulIdentifier","src":"1901:9:7"},{"kind":"number","nativeSrc":"1912:2:7","nodeType":"YulLiteral","src":"1912:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1897:3:7","nodeType":"YulIdentifier","src":"1897:3:7"},"nativeSrc":"1897:18:7","nodeType":"YulFunctionCall","src":"1897:18:7"},"variableNames":[{"name":"tail","nativeSrc":"1889:4:7","nodeType":"YulIdentifier","src":"1889:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1931:9:7","nodeType":"YulIdentifier","src":"1931:9:7"},{"arguments":[{"name":"value0","nativeSrc":"1946:6:7","nodeType":"YulIdentifier","src":"1946:6:7"},{"kind":"number","nativeSrc":"1954:4:7","nodeType":"YulLiteral","src":"1954:4:7","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"1942:3:7","nodeType":"YulIdentifier","src":"1942:3:7"},"nativeSrc":"1942:17:7","nodeType":"YulFunctionCall","src":"1942:17:7"}],"functionName":{"name":"mstore","nativeSrc":"1924:6:7","nodeType":"YulIdentifier","src":"1924:6:7"},"nativeSrc":"1924:36:7","nodeType":"YulFunctionCall","src":"1924:36:7"},"nativeSrc":"1924:36:7","nodeType":"YulExpressionStatement","src":"1924:36:7"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"1782:184:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1848:9:7","nodeType":"YulTypedName","src":"1848:9:7","type":""},{"name":"value0","nativeSrc":"1859:6:7","nodeType":"YulTypedName","src":"1859:6:7","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1870:4:7","nodeType":"YulTypedName","src":"1870:4:7","type":""}],"src":"1782:184:7"},{"body":{"nativeSrc":"2003:95:7","nodeType":"YulBlock","src":"2003:95:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2020:1:7","nodeType":"YulLiteral","src":"2020:1:7","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"2027:3:7","nodeType":"YulLiteral","src":"2027:3:7","type":"","value":"224"},{"kind":"number","nativeSrc":"2032:10:7","nodeType":"YulLiteral","src":"2032:10:7","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"2023:3:7","nodeType":"YulIdentifier","src":"2023:3:7"},"nativeSrc":"2023:20:7","nodeType":"YulFunctionCall","src":"2023:20:7"}],"functionName":{"name":"mstore","nativeSrc":"2013:6:7","nodeType":"YulIdentifier","src":"2013:6:7"},"nativeSrc":"2013:31:7","nodeType":"YulFunctionCall","src":"2013:31:7"},"nativeSrc":"2013:31:7","nodeType":"YulExpressionStatement","src":"2013:31:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"2060:1:7","nodeType":"YulLiteral","src":"2060:1:7","type":"","value":"4"},{"kind":"number","nativeSrc":"2063:4:7","nodeType":"YulLiteral","src":"2063:4:7","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"2053:6:7","nodeType":"YulIdentifier","src":"2053:6:7"},"nativeSrc":"2053:15:7","nodeType":"YulFunctionCall","src":"2053:15:7"},"nativeSrc":"2053:15:7","nodeType":"YulExpressionStatement","src":"2053:15:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"2084:1:7","nodeType":"YulLiteral","src":"2084:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"2087:4:7","nodeType":"YulLiteral","src":"2087:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"2077:6:7","nodeType":"YulIdentifier","src":"2077:6:7"},"nativeSrc":"2077:15:7","nodeType":"YulFunctionCall","src":"2077:15:7"},"nativeSrc":"2077:15:7","nodeType":"YulExpressionStatement","src":"2077:15:7"}]},"name":"panic_error_0x41","nativeSrc":"1971:127:7","nodeType":"YulFunctionDefinition","src":"1971:127:7"},{"body":{"nativeSrc":"2148:230:7","nodeType":"YulBlock","src":"2148:230:7","statements":[{"nativeSrc":"2158:19:7","nodeType":"YulAssignment","src":"2158:19:7","value":{"arguments":[{"kind":"number","nativeSrc":"2174:2:7","nodeType":"YulLiteral","src":"2174:2:7","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"2168:5:7","nodeType":"YulIdentifier","src":"2168:5:7"},"nativeSrc":"2168:9:7","nodeType":"YulFunctionCall","src":"2168:9:7"},"variableNames":[{"name":"memPtr","nativeSrc":"2158:6:7","nodeType":"YulIdentifier","src":"2158:6:7"}]},{"nativeSrc":"2186:58:7","nodeType":"YulVariableDeclaration","src":"2186:58:7","value":{"arguments":[{"name":"memPtr","nativeSrc":"2208:6:7","nodeType":"YulIdentifier","src":"2208:6:7"},{"arguments":[{"arguments":[{"name":"size","nativeSrc":"2224:4:7","nodeType":"YulIdentifier","src":"2224:4:7"},{"kind":"number","nativeSrc":"2230:2:7","nodeType":"YulLiteral","src":"2230:2:7","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"2220:3:7","nodeType":"YulIdentifier","src":"2220:3:7"},"nativeSrc":"2220:13:7","nodeType":"YulFunctionCall","src":"2220:13:7"},{"arguments":[{"kind":"number","nativeSrc":"2239:2:7","nodeType":"YulLiteral","src":"2239:2:7","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"2235:3:7","nodeType":"YulIdentifier","src":"2235:3:7"},"nativeSrc":"2235:7:7","nodeType":"YulFunctionCall","src":"2235:7:7"}],"functionName":{"name":"and","nativeSrc":"2216:3:7","nodeType":"YulIdentifier","src":"2216:3:7"},"nativeSrc":"2216:27:7","nodeType":"YulFunctionCall","src":"2216:27:7"}],"functionName":{"name":"add","nativeSrc":"2204:3:7","nodeType":"YulIdentifier","src":"2204:3:7"},"nativeSrc":"2204:40:7","nodeType":"YulFunctionCall","src":"2204:40:7"},"variables":[{"name":"newFreePtr","nativeSrc":"2190:10:7","nodeType":"YulTypedName","src":"2190:10:7","type":""}]},{"body":{"nativeSrc":"2319:22:7","nodeType":"YulBlock","src":"2319:22:7","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"2321:16:7","nodeType":"YulIdentifier","src":"2321:16:7"},"nativeSrc":"2321:18:7","nodeType":"YulFunctionCall","src":"2321:18:7"},"nativeSrc":"2321:18:7","nodeType":"YulExpressionStatement","src":"2321:18:7"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"2262:10:7","nodeType":"YulIdentifier","src":"2262:10:7"},{"kind":"number","nativeSrc":"2274:18:7","nodeType":"YulLiteral","src":"2274:18:7","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"2259:2:7","nodeType":"YulIdentifier","src":"2259:2:7"},"nativeSrc":"2259:34:7","nodeType":"YulFunctionCall","src":"2259:34:7"},{"arguments":[{"name":"newFreePtr","nativeSrc":"2298:10:7","nodeType":"YulIdentifier","src":"2298:10:7"},{"name":"memPtr","nativeSrc":"2310:6:7","nodeType":"YulIdentifier","src":"2310:6:7"}],"functionName":{"name":"lt","nativeSrc":"2295:2:7","nodeType":"YulIdentifier","src":"2295:2:7"},"nativeSrc":"2295:22:7","nodeType":"YulFunctionCall","src":"2295:22:7"}],"functionName":{"name":"or","nativeSrc":"2256:2:7","nodeType":"YulIdentifier","src":"2256:2:7"},"nativeSrc":"2256:62:7","nodeType":"YulFunctionCall","src":"2256:62:7"},"nativeSrc":"2253:88:7","nodeType":"YulIf","src":"2253:88:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"2357:2:7","nodeType":"YulLiteral","src":"2357:2:7","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"2361:10:7","nodeType":"YulIdentifier","src":"2361:10:7"}],"functionName":{"name":"mstore","nativeSrc":"2350:6:7","nodeType":"YulIdentifier","src":"2350:6:7"},"nativeSrc":"2350:22:7","nodeType":"YulFunctionCall","src":"2350:22:7"},"nativeSrc":"2350:22:7","nodeType":"YulExpressionStatement","src":"2350:22:7"}]},"name":"allocate_memory","nativeSrc":"2103:275:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"2128:4:7","nodeType":"YulTypedName","src":"2128:4:7","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"2137:6:7","nodeType":"YulTypedName","src":"2137:6:7","type":""}],"src":"2103:275:7"},{"body":{"nativeSrc":"2452:114:7","nodeType":"YulBlock","src":"2452:114:7","statements":[{"body":{"nativeSrc":"2496:22:7","nodeType":"YulBlock","src":"2496:22:7","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"2498:16:7","nodeType":"YulIdentifier","src":"2498:16:7"},"nativeSrc":"2498:18:7","nodeType":"YulFunctionCall","src":"2498:18:7"},"nativeSrc":"2498:18:7","nodeType":"YulExpressionStatement","src":"2498:18:7"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"2468:6:7","nodeType":"YulIdentifier","src":"2468:6:7"},{"kind":"number","nativeSrc":"2476:18:7","nodeType":"YulLiteral","src":"2476:18:7","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"2465:2:7","nodeType":"YulIdentifier","src":"2465:2:7"},"nativeSrc":"2465:30:7","nodeType":"YulFunctionCall","src":"2465:30:7"},"nativeSrc":"2462:56:7","nodeType":"YulIf","src":"2462:56:7"},{"nativeSrc":"2527:33:7","nodeType":"YulAssignment","src":"2527:33:7","value":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2543:1:7","nodeType":"YulLiteral","src":"2543:1:7","type":"","value":"5"},{"name":"length","nativeSrc":"2546:6:7","nodeType":"YulIdentifier","src":"2546:6:7"}],"functionName":{"name":"shl","nativeSrc":"2539:3:7","nodeType":"YulIdentifier","src":"2539:3:7"},"nativeSrc":"2539:14:7","nodeType":"YulFunctionCall","src":"2539:14:7"},{"kind":"number","nativeSrc":"2555:4:7","nodeType":"YulLiteral","src":"2555:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2535:3:7","nodeType":"YulIdentifier","src":"2535:3:7"},"nativeSrc":"2535:25:7","nodeType":"YulFunctionCall","src":"2535:25:7"},"variableNames":[{"name":"size","nativeSrc":"2527:4:7","nodeType":"YulIdentifier","src":"2527:4:7"}]}]},"name":"array_allocation_size_array_address_dyn","nativeSrc":"2383:183:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"2432:6:7","nodeType":"YulTypedName","src":"2432:6:7","type":""}],"returnVariables":[{"name":"size","nativeSrc":"2443:4:7","nodeType":"YulTypedName","src":"2443:4:7","type":""}],"src":"2383:183:7"},{"body":{"nativeSrc":"2635:659:7","nodeType":"YulBlock","src":"2635:659:7","statements":[{"body":{"nativeSrc":"2684:16:7","nodeType":"YulBlock","src":"2684:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2693:1:7","nodeType":"YulLiteral","src":"2693:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"2696:1:7","nodeType":"YulLiteral","src":"2696:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2686:6:7","nodeType":"YulIdentifier","src":"2686:6:7"},"nativeSrc":"2686:12:7","nodeType":"YulFunctionCall","src":"2686:12:7"},"nativeSrc":"2686:12:7","nodeType":"YulExpressionStatement","src":"2686:12:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"2663:6:7","nodeType":"YulIdentifier","src":"2663:6:7"},{"kind":"number","nativeSrc":"2671:4:7","nodeType":"YulLiteral","src":"2671:4:7","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"2659:3:7","nodeType":"YulIdentifier","src":"2659:3:7"},"nativeSrc":"2659:17:7","nodeType":"YulFunctionCall","src":"2659:17:7"},{"name":"end","nativeSrc":"2678:3:7","nodeType":"YulIdentifier","src":"2678:3:7"}],"functionName":{"name":"slt","nativeSrc":"2655:3:7","nodeType":"YulIdentifier","src":"2655:3:7"},"nativeSrc":"2655:27:7","nodeType":"YulFunctionCall","src":"2655:27:7"}],"functionName":{"name":"iszero","nativeSrc":"2648:6:7","nodeType":"YulIdentifier","src":"2648:6:7"},"nativeSrc":"2648:35:7","nodeType":"YulFunctionCall","src":"2648:35:7"},"nativeSrc":"2645:55:7","nodeType":"YulIf","src":"2645:55:7"},{"nativeSrc":"2709:34:7","nodeType":"YulVariableDeclaration","src":"2709:34:7","value":{"arguments":[{"name":"offset","nativeSrc":"2736:6:7","nodeType":"YulIdentifier","src":"2736:6:7"}],"functionName":{"name":"calldataload","nativeSrc":"2723:12:7","nodeType":"YulIdentifier","src":"2723:12:7"},"nativeSrc":"2723:20:7","nodeType":"YulFunctionCall","src":"2723:20:7"},"variables":[{"name":"length","nativeSrc":"2713:6:7","nodeType":"YulTypedName","src":"2713:6:7","type":""}]},{"nativeSrc":"2752:75:7","nodeType":"YulVariableDeclaration","src":"2752:75:7","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"2819:6:7","nodeType":"YulIdentifier","src":"2819:6:7"}],"functionName":{"name":"array_allocation_size_array_address_dyn","nativeSrc":"2779:39:7","nodeType":"YulIdentifier","src":"2779:39:7"},"nativeSrc":"2779:47:7","nodeType":"YulFunctionCall","src":"2779:47:7"}],"functionName":{"name":"allocate_memory","nativeSrc":"2763:15:7","nodeType":"YulIdentifier","src":"2763:15:7"},"nativeSrc":"2763:64:7","nodeType":"YulFunctionCall","src":"2763:64:7"},"variables":[{"name":"dst","nativeSrc":"2756:3:7","nodeType":"YulTypedName","src":"2756:3:7","type":""}]},{"nativeSrc":"2836:18:7","nodeType":"YulVariableDeclaration","src":"2836:18:7","value":{"name":"dst","nativeSrc":"2851:3:7","nodeType":"YulIdentifier","src":"2851:3:7"},"variables":[{"name":"array_1","nativeSrc":"2840:7:7","nodeType":"YulTypedName","src":"2840:7:7","type":""}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"2870:3:7","nodeType":"YulIdentifier","src":"2870:3:7"},{"name":"length","nativeSrc":"2875:6:7","nodeType":"YulIdentifier","src":"2875:6:7"}],"functionName":{"name":"mstore","nativeSrc":"2863:6:7","nodeType":"YulIdentifier","src":"2863:6:7"},"nativeSrc":"2863:19:7","nodeType":"YulFunctionCall","src":"2863:19:7"},"nativeSrc":"2863:19:7","nodeType":"YulExpressionStatement","src":"2863:19:7"},{"nativeSrc":"2891:21:7","nodeType":"YulAssignment","src":"2891:21:7","value":{"arguments":[{"name":"dst","nativeSrc":"2902:3:7","nodeType":"YulIdentifier","src":"2902:3:7"},{"kind":"number","nativeSrc":"2907:4:7","nodeType":"YulLiteral","src":"2907:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2898:3:7","nodeType":"YulIdentifier","src":"2898:3:7"},"nativeSrc":"2898:14:7","nodeType":"YulFunctionCall","src":"2898:14:7"},"variableNames":[{"name":"dst","nativeSrc":"2891:3:7","nodeType":"YulIdentifier","src":"2891:3:7"}]},{"nativeSrc":"2921:52:7","nodeType":"YulVariableDeclaration","src":"2921:52:7","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"2943:6:7","nodeType":"YulIdentifier","src":"2943:6:7"},{"arguments":[{"kind":"number","nativeSrc":"2955:1:7","nodeType":"YulLiteral","src":"2955:1:7","type":"","value":"5"},{"name":"length","nativeSrc":"2958:6:7","nodeType":"YulIdentifier","src":"2958:6:7"}],"functionName":{"name":"shl","nativeSrc":"2951:3:7","nodeType":"YulIdentifier","src":"2951:3:7"},"nativeSrc":"2951:14:7","nodeType":"YulFunctionCall","src":"2951:14:7"}],"functionName":{"name":"add","nativeSrc":"2939:3:7","nodeType":"YulIdentifier","src":"2939:3:7"},"nativeSrc":"2939:27:7","nodeType":"YulFunctionCall","src":"2939:27:7"},{"kind":"number","nativeSrc":"2968:4:7","nodeType":"YulLiteral","src":"2968:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2935:3:7","nodeType":"YulIdentifier","src":"2935:3:7"},"nativeSrc":"2935:38:7","nodeType":"YulFunctionCall","src":"2935:38:7"},"variables":[{"name":"srcEnd","nativeSrc":"2925:6:7","nodeType":"YulTypedName","src":"2925:6:7","type":""}]},{"body":{"nativeSrc":"3001:16:7","nodeType":"YulBlock","src":"3001:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3010:1:7","nodeType":"YulLiteral","src":"3010:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"3013:1:7","nodeType":"YulLiteral","src":"3013:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3003:6:7","nodeType":"YulIdentifier","src":"3003:6:7"},"nativeSrc":"3003:12:7","nodeType":"YulFunctionCall","src":"3003:12:7"},"nativeSrc":"3003:12:7","nodeType":"YulExpressionStatement","src":"3003:12:7"}]},"condition":{"arguments":[{"name":"srcEnd","nativeSrc":"2988:6:7","nodeType":"YulIdentifier","src":"2988:6:7"},{"name":"end","nativeSrc":"2996:3:7","nodeType":"YulIdentifier","src":"2996:3:7"}],"functionName":{"name":"gt","nativeSrc":"2985:2:7","nodeType":"YulIdentifier","src":"2985:2:7"},"nativeSrc":"2985:15:7","nodeType":"YulFunctionCall","src":"2985:15:7"},"nativeSrc":"2982:35:7","nodeType":"YulIf","src":"2982:35:7"},{"nativeSrc":"3026:28:7","nodeType":"YulVariableDeclaration","src":"3026:28:7","value":{"arguments":[{"name":"offset","nativeSrc":"3041:6:7","nodeType":"YulIdentifier","src":"3041:6:7"},{"kind":"number","nativeSrc":"3049:4:7","nodeType":"YulLiteral","src":"3049:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3037:3:7","nodeType":"YulIdentifier","src":"3037:3:7"},"nativeSrc":"3037:17:7","nodeType":"YulFunctionCall","src":"3037:17:7"},"variables":[{"name":"src","nativeSrc":"3030:3:7","nodeType":"YulTypedName","src":"3030:3:7","type":""}]},{"body":{"nativeSrc":"3121:142:7","nodeType":"YulBlock","src":"3121:142:7","statements":[{"nativeSrc":"3135:14:7","nodeType":"YulVariableDeclaration","src":"3135:14:7","value":{"kind":"number","nativeSrc":"3148:1:7","nodeType":"YulLiteral","src":"3148:1:7","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"3139:5:7","nodeType":"YulTypedName","src":"3139:5:7","type":""}]},{"nativeSrc":"3162:26:7","nodeType":"YulAssignment","src":"3162:26:7","value":{"arguments":[{"name":"src","nativeSrc":"3184:3:7","nodeType":"YulIdentifier","src":"3184:3:7"}],"functionName":{"name":"calldataload","nativeSrc":"3171:12:7","nodeType":"YulIdentifier","src":"3171:12:7"},"nativeSrc":"3171:17:7","nodeType":"YulFunctionCall","src":"3171:17:7"},"variableNames":[{"name":"value","nativeSrc":"3162:5:7","nodeType":"YulIdentifier","src":"3162:5:7"}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"3208:3:7","nodeType":"YulIdentifier","src":"3208:3:7"},{"name":"value","nativeSrc":"3213:5:7","nodeType":"YulIdentifier","src":"3213:5:7"}],"functionName":{"name":"mstore","nativeSrc":"3201:6:7","nodeType":"YulIdentifier","src":"3201:6:7"},"nativeSrc":"3201:18:7","nodeType":"YulFunctionCall","src":"3201:18:7"},"nativeSrc":"3201:18:7","nodeType":"YulExpressionStatement","src":"3201:18:7"},{"nativeSrc":"3232:21:7","nodeType":"YulAssignment","src":"3232:21:7","value":{"arguments":[{"name":"dst","nativeSrc":"3243:3:7","nodeType":"YulIdentifier","src":"3243:3:7"},{"kind":"number","nativeSrc":"3248:4:7","nodeType":"YulLiteral","src":"3248:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3239:3:7","nodeType":"YulIdentifier","src":"3239:3:7"},"nativeSrc":"3239:14:7","nodeType":"YulFunctionCall","src":"3239:14:7"},"variableNames":[{"name":"dst","nativeSrc":"3232:3:7","nodeType":"YulIdentifier","src":"3232:3:7"}]}]},"condition":{"arguments":[{"name":"src","nativeSrc":"3074:3:7","nodeType":"YulIdentifier","src":"3074:3:7"},{"name":"srcEnd","nativeSrc":"3079:6:7","nodeType":"YulIdentifier","src":"3079:6:7"}],"functionName":{"name":"lt","nativeSrc":"3071:2:7","nodeType":"YulIdentifier","src":"3071:2:7"},"nativeSrc":"3071:15:7","nodeType":"YulFunctionCall","src":"3071:15:7"},"nativeSrc":"3063:200:7","nodeType":"YulForLoop","post":{"nativeSrc":"3087:25:7","nodeType":"YulBlock","src":"3087:25:7","statements":[{"nativeSrc":"3089:21:7","nodeType":"YulAssignment","src":"3089:21:7","value":{"arguments":[{"name":"src","nativeSrc":"3100:3:7","nodeType":"YulIdentifier","src":"3100:3:7"},{"kind":"number","nativeSrc":"3105:4:7","nodeType":"YulLiteral","src":"3105:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3096:3:7","nodeType":"YulIdentifier","src":"3096:3:7"},"nativeSrc":"3096:14:7","nodeType":"YulFunctionCall","src":"3096:14:7"},"variableNames":[{"name":"src","nativeSrc":"3089:3:7","nodeType":"YulIdentifier","src":"3089:3:7"}]}]},"pre":{"nativeSrc":"3067:3:7","nodeType":"YulBlock","src":"3067:3:7","statements":[]},"src":"3063:200:7"},{"nativeSrc":"3272:16:7","nodeType":"YulAssignment","src":"3272:16:7","value":{"name":"array_1","nativeSrc":"3281:7:7","nodeType":"YulIdentifier","src":"3281:7:7"},"variableNames":[{"name":"array","nativeSrc":"3272:5:7","nodeType":"YulIdentifier","src":"3272:5:7"}]}]},"name":"abi_decode_array_uint256_dyn","nativeSrc":"2571:723:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2609:6:7","nodeType":"YulTypedName","src":"2609:6:7","type":""},{"name":"end","nativeSrc":"2617:3:7","nodeType":"YulTypedName","src":"2617:3:7","type":""}],"returnVariables":[{"name":"array","nativeSrc":"2625:5:7","nodeType":"YulTypedName","src":"2625:5:7","type":""}],"src":"2571:723:7"},{"body":{"nativeSrc":"3436:1009:7","nodeType":"YulBlock","src":"3436:1009:7","statements":[{"body":{"nativeSrc":"3482:16:7","nodeType":"YulBlock","src":"3482:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3491:1:7","nodeType":"YulLiteral","src":"3491:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"3494:1:7","nodeType":"YulLiteral","src":"3494:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3484:6:7","nodeType":"YulIdentifier","src":"3484:6:7"},"nativeSrc":"3484:12:7","nodeType":"YulFunctionCall","src":"3484:12:7"},"nativeSrc":"3484:12:7","nodeType":"YulExpressionStatement","src":"3484:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3457:7:7","nodeType":"YulIdentifier","src":"3457:7:7"},{"name":"headStart","nativeSrc":"3466:9:7","nodeType":"YulIdentifier","src":"3466:9:7"}],"functionName":{"name":"sub","nativeSrc":"3453:3:7","nodeType":"YulIdentifier","src":"3453:3:7"},"nativeSrc":"3453:23:7","nodeType":"YulFunctionCall","src":"3453:23:7"},{"kind":"number","nativeSrc":"3478:2:7","nodeType":"YulLiteral","src":"3478:2:7","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"3449:3:7","nodeType":"YulIdentifier","src":"3449:3:7"},"nativeSrc":"3449:32:7","nodeType":"YulFunctionCall","src":"3449:32:7"},"nativeSrc":"3446:52:7","nodeType":"YulIf","src":"3446:52:7"},{"nativeSrc":"3507:37:7","nodeType":"YulVariableDeclaration","src":"3507:37:7","value":{"arguments":[{"name":"headStart","nativeSrc":"3534:9:7","nodeType":"YulIdentifier","src":"3534:9:7"}],"functionName":{"name":"calldataload","nativeSrc":"3521:12:7","nodeType":"YulIdentifier","src":"3521:12:7"},"nativeSrc":"3521:23:7","nodeType":"YulFunctionCall","src":"3521:23:7"},"variables":[{"name":"offset","nativeSrc":"3511:6:7","nodeType":"YulTypedName","src":"3511:6:7","type":""}]},{"body":{"nativeSrc":"3587:16:7","nodeType":"YulBlock","src":"3587:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3596:1:7","nodeType":"YulLiteral","src":"3596:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"3599:1:7","nodeType":"YulLiteral","src":"3599:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3589:6:7","nodeType":"YulIdentifier","src":"3589:6:7"},"nativeSrc":"3589:12:7","nodeType":"YulFunctionCall","src":"3589:12:7"},"nativeSrc":"3589:12:7","nodeType":"YulExpressionStatement","src":"3589:12:7"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"3559:6:7","nodeType":"YulIdentifier","src":"3559:6:7"},{"kind":"number","nativeSrc":"3567:18:7","nodeType":"YulLiteral","src":"3567:18:7","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3556:2:7","nodeType":"YulIdentifier","src":"3556:2:7"},"nativeSrc":"3556:30:7","nodeType":"YulFunctionCall","src":"3556:30:7"},"nativeSrc":"3553:50:7","nodeType":"YulIf","src":"3553:50:7"},{"nativeSrc":"3612:32:7","nodeType":"YulVariableDeclaration","src":"3612:32:7","value":{"arguments":[{"name":"headStart","nativeSrc":"3626:9:7","nodeType":"YulIdentifier","src":"3626:9:7"},{"name":"offset","nativeSrc":"3637:6:7","nodeType":"YulIdentifier","src":"3637:6:7"}],"functionName":{"name":"add","nativeSrc":"3622:3:7","nodeType":"YulIdentifier","src":"3622:3:7"},"nativeSrc":"3622:22:7","nodeType":"YulFunctionCall","src":"3622:22:7"},"variables":[{"name":"_1","nativeSrc":"3616:2:7","nodeType":"YulTypedName","src":"3616:2:7","type":""}]},{"body":{"nativeSrc":"3692:16:7","nodeType":"YulBlock","src":"3692:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3701:1:7","nodeType":"YulLiteral","src":"3701:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"3704:1:7","nodeType":"YulLiteral","src":"3704:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3694:6:7","nodeType":"YulIdentifier","src":"3694:6:7"},"nativeSrc":"3694:12:7","nodeType":"YulFunctionCall","src":"3694:12:7"},"nativeSrc":"3694:12:7","nodeType":"YulExpressionStatement","src":"3694:12:7"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nativeSrc":"3671:2:7","nodeType":"YulIdentifier","src":"3671:2:7"},{"kind":"number","nativeSrc":"3675:4:7","nodeType":"YulLiteral","src":"3675:4:7","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"3667:3:7","nodeType":"YulIdentifier","src":"3667:3:7"},"nativeSrc":"3667:13:7","nodeType":"YulFunctionCall","src":"3667:13:7"},{"name":"dataEnd","nativeSrc":"3682:7:7","nodeType":"YulIdentifier","src":"3682:7:7"}],"functionName":{"name":"slt","nativeSrc":"3663:3:7","nodeType":"YulIdentifier","src":"3663:3:7"},"nativeSrc":"3663:27:7","nodeType":"YulFunctionCall","src":"3663:27:7"}],"functionName":{"name":"iszero","nativeSrc":"3656:6:7","nodeType":"YulIdentifier","src":"3656:6:7"},"nativeSrc":"3656:35:7","nodeType":"YulFunctionCall","src":"3656:35:7"},"nativeSrc":"3653:55:7","nodeType":"YulIf","src":"3653:55:7"},{"nativeSrc":"3717:30:7","nodeType":"YulVariableDeclaration","src":"3717:30:7","value":{"arguments":[{"name":"_1","nativeSrc":"3744:2:7","nodeType":"YulIdentifier","src":"3744:2:7"}],"functionName":{"name":"calldataload","nativeSrc":"3731:12:7","nodeType":"YulIdentifier","src":"3731:12:7"},"nativeSrc":"3731:16:7","nodeType":"YulFunctionCall","src":"3731:16:7"},"variables":[{"name":"length","nativeSrc":"3721:6:7","nodeType":"YulTypedName","src":"3721:6:7","type":""}]},{"nativeSrc":"3756:75:7","nodeType":"YulVariableDeclaration","src":"3756:75:7","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"3823:6:7","nodeType":"YulIdentifier","src":"3823:6:7"}],"functionName":{"name":"array_allocation_size_array_address_dyn","nativeSrc":"3783:39:7","nodeType":"YulIdentifier","src":"3783:39:7"},"nativeSrc":"3783:47:7","nodeType":"YulFunctionCall","src":"3783:47:7"}],"functionName":{"name":"allocate_memory","nativeSrc":"3767:15:7","nodeType":"YulIdentifier","src":"3767:15:7"},"nativeSrc":"3767:64:7","nodeType":"YulFunctionCall","src":"3767:64:7"},"variables":[{"name":"dst","nativeSrc":"3760:3:7","nodeType":"YulTypedName","src":"3760:3:7","type":""}]},{"nativeSrc":"3840:16:7","nodeType":"YulVariableDeclaration","src":"3840:16:7","value":{"name":"dst","nativeSrc":"3853:3:7","nodeType":"YulIdentifier","src":"3853:3:7"},"variables":[{"name":"array","nativeSrc":"3844:5:7","nodeType":"YulTypedName","src":"3844:5:7","type":""}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"3872:3:7","nodeType":"YulIdentifier","src":"3872:3:7"},{"name":"length","nativeSrc":"3877:6:7","nodeType":"YulIdentifier","src":"3877:6:7"}],"functionName":{"name":"mstore","nativeSrc":"3865:6:7","nodeType":"YulIdentifier","src":"3865:6:7"},"nativeSrc":"3865:19:7","nodeType":"YulFunctionCall","src":"3865:19:7"},"nativeSrc":"3865:19:7","nodeType":"YulExpressionStatement","src":"3865:19:7"},{"nativeSrc":"3893:21:7","nodeType":"YulAssignment","src":"3893:21:7","value":{"arguments":[{"name":"dst","nativeSrc":"3904:3:7","nodeType":"YulIdentifier","src":"3904:3:7"},{"kind":"number","nativeSrc":"3909:4:7","nodeType":"YulLiteral","src":"3909:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3900:3:7","nodeType":"YulIdentifier","src":"3900:3:7"},"nativeSrc":"3900:14:7","nodeType":"YulFunctionCall","src":"3900:14:7"},"variableNames":[{"name":"dst","nativeSrc":"3893:3:7","nodeType":"YulIdentifier","src":"3893:3:7"}]},{"nativeSrc":"3923:48:7","nodeType":"YulVariableDeclaration","src":"3923:48:7","value":{"arguments":[{"arguments":[{"name":"_1","nativeSrc":"3945:2:7","nodeType":"YulIdentifier","src":"3945:2:7"},{"arguments":[{"kind":"number","nativeSrc":"3953:1:7","nodeType":"YulLiteral","src":"3953:1:7","type":"","value":"5"},{"name":"length","nativeSrc":"3956:6:7","nodeType":"YulIdentifier","src":"3956:6:7"}],"functionName":{"name":"shl","nativeSrc":"3949:3:7","nodeType":"YulIdentifier","src":"3949:3:7"},"nativeSrc":"3949:14:7","nodeType":"YulFunctionCall","src":"3949:14:7"}],"functionName":{"name":"add","nativeSrc":"3941:3:7","nodeType":"YulIdentifier","src":"3941:3:7"},"nativeSrc":"3941:23:7","nodeType":"YulFunctionCall","src":"3941:23:7"},{"kind":"number","nativeSrc":"3966:4:7","nodeType":"YulLiteral","src":"3966:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3937:3:7","nodeType":"YulIdentifier","src":"3937:3:7"},"nativeSrc":"3937:34:7","nodeType":"YulFunctionCall","src":"3937:34:7"},"variables":[{"name":"srcEnd","nativeSrc":"3927:6:7","nodeType":"YulTypedName","src":"3927:6:7","type":""}]},{"body":{"nativeSrc":"4003:16:7","nodeType":"YulBlock","src":"4003:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4012:1:7","nodeType":"YulLiteral","src":"4012:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"4015:1:7","nodeType":"YulLiteral","src":"4015:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4005:6:7","nodeType":"YulIdentifier","src":"4005:6:7"},"nativeSrc":"4005:12:7","nodeType":"YulFunctionCall","src":"4005:12:7"},"nativeSrc":"4005:12:7","nodeType":"YulExpressionStatement","src":"4005:12:7"}]},"condition":{"arguments":[{"name":"srcEnd","nativeSrc":"3986:6:7","nodeType":"YulIdentifier","src":"3986:6:7"},{"name":"dataEnd","nativeSrc":"3994:7:7","nodeType":"YulIdentifier","src":"3994:7:7"}],"functionName":{"name":"gt","nativeSrc":"3983:2:7","nodeType":"YulIdentifier","src":"3983:2:7"},"nativeSrc":"3983:19:7","nodeType":"YulFunctionCall","src":"3983:19:7"},"nativeSrc":"3980:39:7","nodeType":"YulIf","src":"3980:39:7"},{"nativeSrc":"4028:24:7","nodeType":"YulVariableDeclaration","src":"4028:24:7","value":{"arguments":[{"name":"_1","nativeSrc":"4043:2:7","nodeType":"YulIdentifier","src":"4043:2:7"},{"kind":"number","nativeSrc":"4047:4:7","nodeType":"YulLiteral","src":"4047:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4039:3:7","nodeType":"YulIdentifier","src":"4039:3:7"},"nativeSrc":"4039:13:7","nodeType":"YulFunctionCall","src":"4039:13:7"},"variables":[{"name":"src","nativeSrc":"4032:3:7","nodeType":"YulTypedName","src":"4032:3:7","type":""}]},{"body":{"nativeSrc":"4119:94:7","nodeType":"YulBlock","src":"4119:94:7","statements":[{"expression":{"arguments":[{"name":"dst","nativeSrc":"4140:3:7","nodeType":"YulIdentifier","src":"4140:3:7"},{"arguments":[{"name":"src","nativeSrc":"4164:3:7","nodeType":"YulIdentifier","src":"4164:3:7"}],"functionName":{"name":"abi_decode_address","nativeSrc":"4145:18:7","nodeType":"YulIdentifier","src":"4145:18:7"},"nativeSrc":"4145:23:7","nodeType":"YulFunctionCall","src":"4145:23:7"}],"functionName":{"name":"mstore","nativeSrc":"4133:6:7","nodeType":"YulIdentifier","src":"4133:6:7"},"nativeSrc":"4133:36:7","nodeType":"YulFunctionCall","src":"4133:36:7"},"nativeSrc":"4133:36:7","nodeType":"YulExpressionStatement","src":"4133:36:7"},{"nativeSrc":"4182:21:7","nodeType":"YulAssignment","src":"4182:21:7","value":{"arguments":[{"name":"dst","nativeSrc":"4193:3:7","nodeType":"YulIdentifier","src":"4193:3:7"},{"kind":"number","nativeSrc":"4198:4:7","nodeType":"YulLiteral","src":"4198:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4189:3:7","nodeType":"YulIdentifier","src":"4189:3:7"},"nativeSrc":"4189:14:7","nodeType":"YulFunctionCall","src":"4189:14:7"},"variableNames":[{"name":"dst","nativeSrc":"4182:3:7","nodeType":"YulIdentifier","src":"4182:3:7"}]}]},"condition":{"arguments":[{"name":"src","nativeSrc":"4072:3:7","nodeType":"YulIdentifier","src":"4072:3:7"},{"name":"srcEnd","nativeSrc":"4077:6:7","nodeType":"YulIdentifier","src":"4077:6:7"}],"functionName":{"name":"lt","nativeSrc":"4069:2:7","nodeType":"YulIdentifier","src":"4069:2:7"},"nativeSrc":"4069:15:7","nodeType":"YulFunctionCall","src":"4069:15:7"},"nativeSrc":"4061:152:7","nodeType":"YulForLoop","post":{"nativeSrc":"4085:25:7","nodeType":"YulBlock","src":"4085:25:7","statements":[{"nativeSrc":"4087:21:7","nodeType":"YulAssignment","src":"4087:21:7","value":{"arguments":[{"name":"src","nativeSrc":"4098:3:7","nodeType":"YulIdentifier","src":"4098:3:7"},{"kind":"number","nativeSrc":"4103:4:7","nodeType":"YulLiteral","src":"4103:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4094:3:7","nodeType":"YulIdentifier","src":"4094:3:7"},"nativeSrc":"4094:14:7","nodeType":"YulFunctionCall","src":"4094:14:7"},"variableNames":[{"name":"src","nativeSrc":"4087:3:7","nodeType":"YulIdentifier","src":"4087:3:7"}]}]},"pre":{"nativeSrc":"4065:3:7","nodeType":"YulBlock","src":"4065:3:7","statements":[]},"src":"4061:152:7"},{"nativeSrc":"4222:15:7","nodeType":"YulAssignment","src":"4222:15:7","value":{"name":"array","nativeSrc":"4232:5:7","nodeType":"YulIdentifier","src":"4232:5:7"},"variableNames":[{"name":"value0","nativeSrc":"4222:6:7","nodeType":"YulIdentifier","src":"4222:6:7"}]},{"nativeSrc":"4246:50:7","nodeType":"YulVariableDeclaration","src":"4246:50:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4279:9:7","nodeType":"YulIdentifier","src":"4279:9:7"},{"kind":"number","nativeSrc":"4290:4:7","nodeType":"YulLiteral","src":"4290:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4275:3:7","nodeType":"YulIdentifier","src":"4275:3:7"},"nativeSrc":"4275:20:7","nodeType":"YulFunctionCall","src":"4275:20:7"}],"functionName":{"name":"calldataload","nativeSrc":"4262:12:7","nodeType":"YulIdentifier","src":"4262:12:7"},"nativeSrc":"4262:34:7","nodeType":"YulFunctionCall","src":"4262:34:7"},"variables":[{"name":"offset_1","nativeSrc":"4250:8:7","nodeType":"YulTypedName","src":"4250:8:7","type":""}]},{"body":{"nativeSrc":"4341:16:7","nodeType":"YulBlock","src":"4341:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4350:1:7","nodeType":"YulLiteral","src":"4350:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"4353:1:7","nodeType":"YulLiteral","src":"4353:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4343:6:7","nodeType":"YulIdentifier","src":"4343:6:7"},"nativeSrc":"4343:12:7","nodeType":"YulFunctionCall","src":"4343:12:7"},"nativeSrc":"4343:12:7","nodeType":"YulExpressionStatement","src":"4343:12:7"}]},"condition":{"arguments":[{"name":"offset_1","nativeSrc":"4311:8:7","nodeType":"YulIdentifier","src":"4311:8:7"},{"kind":"number","nativeSrc":"4321:18:7","nodeType":"YulLiteral","src":"4321:18:7","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"4308:2:7","nodeType":"YulIdentifier","src":"4308:2:7"},"nativeSrc":"4308:32:7","nodeType":"YulFunctionCall","src":"4308:32:7"},"nativeSrc":"4305:52:7","nodeType":"YulIf","src":"4305:52:7"},{"nativeSrc":"4366:73:7","nodeType":"YulAssignment","src":"4366:73:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4409:9:7","nodeType":"YulIdentifier","src":"4409:9:7"},{"name":"offset_1","nativeSrc":"4420:8:7","nodeType":"YulIdentifier","src":"4420:8:7"}],"functionName":{"name":"add","nativeSrc":"4405:3:7","nodeType":"YulIdentifier","src":"4405:3:7"},"nativeSrc":"4405:24:7","nodeType":"YulFunctionCall","src":"4405:24:7"},{"name":"dataEnd","nativeSrc":"4431:7:7","nodeType":"YulIdentifier","src":"4431:7:7"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nativeSrc":"4376:28:7","nodeType":"YulIdentifier","src":"4376:28:7"},"nativeSrc":"4376:63:7","nodeType":"YulFunctionCall","src":"4376:63:7"},"variableNames":[{"name":"value1","nativeSrc":"4366:6:7","nodeType":"YulIdentifier","src":"4366:6:7"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"3299:1146:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3394:9:7","nodeType":"YulTypedName","src":"3394:9:7","type":""},{"name":"dataEnd","nativeSrc":"3405:7:7","nodeType":"YulTypedName","src":"3405:7:7","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3417:6:7","nodeType":"YulTypedName","src":"3417:6:7","type":""},{"name":"value1","nativeSrc":"3425:6:7","nodeType":"YulTypedName","src":"3425:6:7","type":""}],"src":"3299:1146:7"},{"body":{"nativeSrc":"4520:116:7","nodeType":"YulBlock","src":"4520:116:7","statements":[{"body":{"nativeSrc":"4566:16:7","nodeType":"YulBlock","src":"4566:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4575:1:7","nodeType":"YulLiteral","src":"4575:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"4578:1:7","nodeType":"YulLiteral","src":"4578:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4568:6:7","nodeType":"YulIdentifier","src":"4568:6:7"},"nativeSrc":"4568:12:7","nodeType":"YulFunctionCall","src":"4568:12:7"},"nativeSrc":"4568:12:7","nodeType":"YulExpressionStatement","src":"4568:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4541:7:7","nodeType":"YulIdentifier","src":"4541:7:7"},{"name":"headStart","nativeSrc":"4550:9:7","nodeType":"YulIdentifier","src":"4550:9:7"}],"functionName":{"name":"sub","nativeSrc":"4537:3:7","nodeType":"YulIdentifier","src":"4537:3:7"},"nativeSrc":"4537:23:7","nodeType":"YulFunctionCall","src":"4537:23:7"},{"kind":"number","nativeSrc":"4562:2:7","nodeType":"YulLiteral","src":"4562:2:7","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"4533:3:7","nodeType":"YulIdentifier","src":"4533:3:7"},"nativeSrc":"4533:32:7","nodeType":"YulFunctionCall","src":"4533:32:7"},"nativeSrc":"4530:52:7","nodeType":"YulIf","src":"4530:52:7"},{"nativeSrc":"4591:39:7","nodeType":"YulAssignment","src":"4591:39:7","value":{"arguments":[{"name":"headStart","nativeSrc":"4620:9:7","nodeType":"YulIdentifier","src":"4620:9:7"}],"functionName":{"name":"abi_decode_address","nativeSrc":"4601:18:7","nodeType":"YulIdentifier","src":"4601:18:7"},"nativeSrc":"4601:29:7","nodeType":"YulFunctionCall","src":"4601:29:7"},"variableNames":[{"name":"value0","nativeSrc":"4591:6:7","nodeType":"YulIdentifier","src":"4591:6:7"}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"4450:186:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4486:9:7","nodeType":"YulTypedName","src":"4486:9:7","type":""},{"name":"dataEnd","nativeSrc":"4497:7:7","nodeType":"YulTypedName","src":"4497:7:7","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4509:6:7","nodeType":"YulTypedName","src":"4509:6:7","type":""}],"src":"4450:186:7"},{"body":{"nativeSrc":"4742:102:7","nodeType":"YulBlock","src":"4742:102:7","statements":[{"nativeSrc":"4752:26:7","nodeType":"YulAssignment","src":"4752:26:7","value":{"arguments":[{"name":"headStart","nativeSrc":"4764:9:7","nodeType":"YulIdentifier","src":"4764:9:7"},{"kind":"number","nativeSrc":"4775:2:7","nodeType":"YulLiteral","src":"4775:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4760:3:7","nodeType":"YulIdentifier","src":"4760:3:7"},"nativeSrc":"4760:18:7","nodeType":"YulFunctionCall","src":"4760:18:7"},"variableNames":[{"name":"tail","nativeSrc":"4752:4:7","nodeType":"YulIdentifier","src":"4752:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"4794:9:7","nodeType":"YulIdentifier","src":"4794:9:7"},{"arguments":[{"name":"value0","nativeSrc":"4809:6:7","nodeType":"YulIdentifier","src":"4809:6:7"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"4825:3:7","nodeType":"YulLiteral","src":"4825:3:7","type":"","value":"160"},{"kind":"number","nativeSrc":"4830:1:7","nodeType":"YulLiteral","src":"4830:1:7","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"4821:3:7","nodeType":"YulIdentifier","src":"4821:3:7"},"nativeSrc":"4821:11:7","nodeType":"YulFunctionCall","src":"4821:11:7"},{"kind":"number","nativeSrc":"4834:1:7","nodeType":"YulLiteral","src":"4834:1:7","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"4817:3:7","nodeType":"YulIdentifier","src":"4817:3:7"},"nativeSrc":"4817:19:7","nodeType":"YulFunctionCall","src":"4817:19:7"}],"functionName":{"name":"and","nativeSrc":"4805:3:7","nodeType":"YulIdentifier","src":"4805:3:7"},"nativeSrc":"4805:32:7","nodeType":"YulFunctionCall","src":"4805:32:7"}],"functionName":{"name":"mstore","nativeSrc":"4787:6:7","nodeType":"YulIdentifier","src":"4787:6:7"},"nativeSrc":"4787:51:7","nodeType":"YulFunctionCall","src":"4787:51:7"},"nativeSrc":"4787:51:7","nodeType":"YulExpressionStatement","src":"4787:51:7"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"4641:203:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4711:9:7","nodeType":"YulTypedName","src":"4711:9:7","type":""},{"name":"value0","nativeSrc":"4722:6:7","nodeType":"YulTypedName","src":"4722:6:7","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4733:4:7","nodeType":"YulTypedName","src":"4733:4:7","type":""}],"src":"4641:203:7"},{"body":{"nativeSrc":"4936:173:7","nodeType":"YulBlock","src":"4936:173:7","statements":[{"body":{"nativeSrc":"4982:16:7","nodeType":"YulBlock","src":"4982:16:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4991:1:7","nodeType":"YulLiteral","src":"4991:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"4994:1:7","nodeType":"YulLiteral","src":"4994:1:7","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4984:6:7","nodeType":"YulIdentifier","src":"4984:6:7"},"nativeSrc":"4984:12:7","nodeType":"YulFunctionCall","src":"4984:12:7"},"nativeSrc":"4984:12:7","nodeType":"YulExpressionStatement","src":"4984:12:7"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4957:7:7","nodeType":"YulIdentifier","src":"4957:7:7"},{"name":"headStart","nativeSrc":"4966:9:7","nodeType":"YulIdentifier","src":"4966:9:7"}],"functionName":{"name":"sub","nativeSrc":"4953:3:7","nodeType":"YulIdentifier","src":"4953:3:7"},"nativeSrc":"4953:23:7","nodeType":"YulFunctionCall","src":"4953:23:7"},{"kind":"number","nativeSrc":"4978:2:7","nodeType":"YulLiteral","src":"4978:2:7","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"4949:3:7","nodeType":"YulIdentifier","src":"4949:3:7"},"nativeSrc":"4949:32:7","nodeType":"YulFunctionCall","src":"4949:32:7"},"nativeSrc":"4946:52:7","nodeType":"YulIf","src":"4946:52:7"},{"nativeSrc":"5007:39:7","nodeType":"YulAssignment","src":"5007:39:7","value":{"arguments":[{"name":"headStart","nativeSrc":"5036:9:7","nodeType":"YulIdentifier","src":"5036:9:7"}],"functionName":{"name":"abi_decode_address","nativeSrc":"5017:18:7","nodeType":"YulIdentifier","src":"5017:18:7"},"nativeSrc":"5017:29:7","nodeType":"YulFunctionCall","src":"5017:29:7"},"variableNames":[{"name":"value0","nativeSrc":"5007:6:7","nodeType":"YulIdentifier","src":"5007:6:7"}]},{"nativeSrc":"5055:48:7","nodeType":"YulAssignment","src":"5055:48:7","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5088:9:7","nodeType":"YulIdentifier","src":"5088:9:7"},{"kind":"number","nativeSrc":"5099:2:7","nodeType":"YulLiteral","src":"5099:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5084:3:7","nodeType":"YulIdentifier","src":"5084:3:7"},"nativeSrc":"5084:18:7","nodeType":"YulFunctionCall","src":"5084:18:7"}],"functionName":{"name":"abi_decode_address","nativeSrc":"5065:18:7","nodeType":"YulIdentifier","src":"5065:18:7"},"nativeSrc":"5065:38:7","nodeType":"YulFunctionCall","src":"5065:38:7"},"variableNames":[{"name":"value1","nativeSrc":"5055:6:7","nodeType":"YulIdentifier","src":"5055:6:7"}]}]},"name":"abi_decode_tuple_t_addresst_address","nativeSrc":"4849:260:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4894:9:7","nodeType":"YulTypedName","src":"4894:9:7","type":""},{"name":"dataEnd","nativeSrc":"4905:7:7","nodeType":"YulTypedName","src":"4905:7:7","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4917:6:7","nodeType":"YulTypedName","src":"4917:6:7","type":""},{"name":"value1","nativeSrc":"4925:6:7","nodeType":"YulTypedName","src":"4925:6:7","type":""}],"src":"4849:260:7"},{"body":{"nativeSrc":"5169:325:7","nodeType":"YulBlock","src":"5169:325:7","statements":[{"nativeSrc":"5179:22:7","nodeType":"YulAssignment","src":"5179:22:7","value":{"arguments":[{"kind":"number","nativeSrc":"5193:1:7","nodeType":"YulLiteral","src":"5193:1:7","type":"","value":"1"},{"name":"data","nativeSrc":"5196:4:7","nodeType":"YulIdentifier","src":"5196:4:7"}],"functionName":{"name":"shr","nativeSrc":"5189:3:7","nodeType":"YulIdentifier","src":"5189:3:7"},"nativeSrc":"5189:12:7","nodeType":"YulFunctionCall","src":"5189:12:7"},"variableNames":[{"name":"length","nativeSrc":"5179:6:7","nodeType":"YulIdentifier","src":"5179:6:7"}]},{"nativeSrc":"5210:38:7","nodeType":"YulVariableDeclaration","src":"5210:38:7","value":{"arguments":[{"name":"data","nativeSrc":"5240:4:7","nodeType":"YulIdentifier","src":"5240:4:7"},{"kind":"number","nativeSrc":"5246:1:7","nodeType":"YulLiteral","src":"5246:1:7","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"5236:3:7","nodeType":"YulIdentifier","src":"5236:3:7"},"nativeSrc":"5236:12:7","nodeType":"YulFunctionCall","src":"5236:12:7"},"variables":[{"name":"outOfPlaceEncoding","nativeSrc":"5214:18:7","nodeType":"YulTypedName","src":"5214:18:7","type":""}]},{"body":{"nativeSrc":"5287:31:7","nodeType":"YulBlock","src":"5287:31:7","statements":[{"nativeSrc":"5289:27:7","nodeType":"YulAssignment","src":"5289:27:7","value":{"arguments":[{"name":"length","nativeSrc":"5303:6:7","nodeType":"YulIdentifier","src":"5303:6:7"},{"kind":"number","nativeSrc":"5311:4:7","nodeType":"YulLiteral","src":"5311:4:7","type":"","value":"0x7f"}],"functionName":{"name":"and","nativeSrc":"5299:3:7","nodeType":"YulIdentifier","src":"5299:3:7"},"nativeSrc":"5299:17:7","nodeType":"YulFunctionCall","src":"5299:17:7"},"variableNames":[{"name":"length","nativeSrc":"5289:6:7","nodeType":"YulIdentifier","src":"5289:6:7"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"5267:18:7","nodeType":"YulIdentifier","src":"5267:18:7"}],"functionName":{"name":"iszero","nativeSrc":"5260:6:7","nodeType":"YulIdentifier","src":"5260:6:7"},"nativeSrc":"5260:26:7","nodeType":"YulFunctionCall","src":"5260:26:7"},"nativeSrc":"5257:61:7","nodeType":"YulIf","src":"5257:61:7"},{"body":{"nativeSrc":"5377:111:7","nodeType":"YulBlock","src":"5377:111:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5398:1:7","nodeType":"YulLiteral","src":"5398:1:7","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"5405:3:7","nodeType":"YulLiteral","src":"5405:3:7","type":"","value":"224"},{"kind":"number","nativeSrc":"5410:10:7","nodeType":"YulLiteral","src":"5410:10:7","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"5401:3:7","nodeType":"YulIdentifier","src":"5401:3:7"},"nativeSrc":"5401:20:7","nodeType":"YulFunctionCall","src":"5401:20:7"}],"functionName":{"name":"mstore","nativeSrc":"5391:6:7","nodeType":"YulIdentifier","src":"5391:6:7"},"nativeSrc":"5391:31:7","nodeType":"YulFunctionCall","src":"5391:31:7"},"nativeSrc":"5391:31:7","nodeType":"YulExpressionStatement","src":"5391:31:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"5442:1:7","nodeType":"YulLiteral","src":"5442:1:7","type":"","value":"4"},{"kind":"number","nativeSrc":"5445:4:7","nodeType":"YulLiteral","src":"5445:4:7","type":"","value":"0x22"}],"functionName":{"name":"mstore","nativeSrc":"5435:6:7","nodeType":"YulIdentifier","src":"5435:6:7"},"nativeSrc":"5435:15:7","nodeType":"YulFunctionCall","src":"5435:15:7"},"nativeSrc":"5435:15:7","nodeType":"YulExpressionStatement","src":"5435:15:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"5470:1:7","nodeType":"YulLiteral","src":"5470:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"5473:4:7","nodeType":"YulLiteral","src":"5473:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"5463:6:7","nodeType":"YulIdentifier","src":"5463:6:7"},"nativeSrc":"5463:15:7","nodeType":"YulFunctionCall","src":"5463:15:7"},"nativeSrc":"5463:15:7","nodeType":"YulExpressionStatement","src":"5463:15:7"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"5333:18:7","nodeType":"YulIdentifier","src":"5333:18:7"},{"arguments":[{"name":"length","nativeSrc":"5356:6:7","nodeType":"YulIdentifier","src":"5356:6:7"},{"kind":"number","nativeSrc":"5364:2:7","nodeType":"YulLiteral","src":"5364:2:7","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"5353:2:7","nodeType":"YulIdentifier","src":"5353:2:7"},"nativeSrc":"5353:14:7","nodeType":"YulFunctionCall","src":"5353:14:7"}],"functionName":{"name":"eq","nativeSrc":"5330:2:7","nodeType":"YulIdentifier","src":"5330:2:7"},"nativeSrc":"5330:38:7","nodeType":"YulFunctionCall","src":"5330:38:7"},"nativeSrc":"5327:161:7","nodeType":"YulIf","src":"5327:161:7"}]},"name":"extract_byte_array_length","nativeSrc":"5114:380:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"5149:4:7","nodeType":"YulTypedName","src":"5149:4:7","type":""}],"returnVariables":[{"name":"length","nativeSrc":"5158:6:7","nodeType":"YulTypedName","src":"5158:6:7","type":""}],"src":"5114:380:7"},{"body":{"nativeSrc":"5673:172:7","nodeType":"YulBlock","src":"5673:172:7","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"5690:9:7","nodeType":"YulIdentifier","src":"5690:9:7"},{"kind":"number","nativeSrc":"5701:2:7","nodeType":"YulLiteral","src":"5701:2:7","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"5683:6:7","nodeType":"YulIdentifier","src":"5683:6:7"},"nativeSrc":"5683:21:7","nodeType":"YulFunctionCall","src":"5683:21:7"},"nativeSrc":"5683:21:7","nodeType":"YulExpressionStatement","src":"5683:21:7"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5724:9:7","nodeType":"YulIdentifier","src":"5724:9:7"},{"kind":"number","nativeSrc":"5735:2:7","nodeType":"YulLiteral","src":"5735:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5720:3:7","nodeType":"YulIdentifier","src":"5720:3:7"},"nativeSrc":"5720:18:7","nodeType":"YulFunctionCall","src":"5720:18:7"},{"kind":"number","nativeSrc":"5740:2:7","nodeType":"YulLiteral","src":"5740:2:7","type":"","value":"22"}],"functionName":{"name":"mstore","nativeSrc":"5713:6:7","nodeType":"YulIdentifier","src":"5713:6:7"},"nativeSrc":"5713:30:7","nodeType":"YulFunctionCall","src":"5713:30:7"},"nativeSrc":"5713:30:7","nodeType":"YulExpressionStatement","src":"5713:30:7"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5763:9:7","nodeType":"YulIdentifier","src":"5763:9:7"},{"kind":"number","nativeSrc":"5774:2:7","nodeType":"YulLiteral","src":"5774:2:7","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5759:3:7","nodeType":"YulIdentifier","src":"5759:3:7"},"nativeSrc":"5759:18:7","nodeType":"YulFunctionCall","src":"5759:18:7"},{"hexValue":"417272617973206c656e677468206d69736d61746368","kind":"string","nativeSrc":"5779:24:7","nodeType":"YulLiteral","src":"5779:24:7","type":"","value":"Arrays length mismatch"}],"functionName":{"name":"mstore","nativeSrc":"5752:6:7","nodeType":"YulIdentifier","src":"5752:6:7"},"nativeSrc":"5752:52:7","nodeType":"YulFunctionCall","src":"5752:52:7"},"nativeSrc":"5752:52:7","nodeType":"YulExpressionStatement","src":"5752:52:7"},{"nativeSrc":"5813:26:7","nodeType":"YulAssignment","src":"5813:26:7","value":{"arguments":[{"name":"headStart","nativeSrc":"5825:9:7","nodeType":"YulIdentifier","src":"5825:9:7"},{"kind":"number","nativeSrc":"5836:2:7","nodeType":"YulLiteral","src":"5836:2:7","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"5821:3:7","nodeType":"YulIdentifier","src":"5821:3:7"},"nativeSrc":"5821:18:7","nodeType":"YulFunctionCall","src":"5821:18:7"},"variableNames":[{"name":"tail","nativeSrc":"5813:4:7","nodeType":"YulIdentifier","src":"5813:4:7"}]}]},"name":"abi_encode_tuple_t_stringliteral_582fd48f3876d7686bfeaaaa0db0589073271dedd50d66094f02fee2a3d2e01c__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"5499:346:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5650:9:7","nodeType":"YulTypedName","src":"5650:9:7","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5664:4:7","nodeType":"YulTypedName","src":"5664:4:7","type":""}],"src":"5499:346:7"},{"body":{"nativeSrc":"5882:95:7","nodeType":"YulBlock","src":"5882:95:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5899:1:7","nodeType":"YulLiteral","src":"5899:1:7","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"5906:3:7","nodeType":"YulLiteral","src":"5906:3:7","type":"","value":"224"},{"kind":"number","nativeSrc":"5911:10:7","nodeType":"YulLiteral","src":"5911:10:7","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"5902:3:7","nodeType":"YulIdentifier","src":"5902:3:7"},"nativeSrc":"5902:20:7","nodeType":"YulFunctionCall","src":"5902:20:7"}],"functionName":{"name":"mstore","nativeSrc":"5892:6:7","nodeType":"YulIdentifier","src":"5892:6:7"},"nativeSrc":"5892:31:7","nodeType":"YulFunctionCall","src":"5892:31:7"},"nativeSrc":"5892:31:7","nodeType":"YulExpressionStatement","src":"5892:31:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"5939:1:7","nodeType":"YulLiteral","src":"5939:1:7","type":"","value":"4"},{"kind":"number","nativeSrc":"5942:4:7","nodeType":"YulLiteral","src":"5942:4:7","type":"","value":"0x32"}],"functionName":{"name":"mstore","nativeSrc":"5932:6:7","nodeType":"YulIdentifier","src":"5932:6:7"},"nativeSrc":"5932:15:7","nodeType":"YulFunctionCall","src":"5932:15:7"},"nativeSrc":"5932:15:7","nodeType":"YulExpressionStatement","src":"5932:15:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"5963:1:7","nodeType":"YulLiteral","src":"5963:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"5966:4:7","nodeType":"YulLiteral","src":"5966:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"5956:6:7","nodeType":"YulIdentifier","src":"5956:6:7"},"nativeSrc":"5956:15:7","nodeType":"YulFunctionCall","src":"5956:15:7"},"nativeSrc":"5956:15:7","nodeType":"YulExpressionStatement","src":"5956:15:7"}]},"name":"panic_error_0x32","nativeSrc":"5850:127:7","nodeType":"YulFunctionDefinition","src":"5850:127:7"},{"body":{"nativeSrc":"6139:188:7","nodeType":"YulBlock","src":"6139:188:7","statements":[{"nativeSrc":"6149:26:7","nodeType":"YulAssignment","src":"6149:26:7","value":{"arguments":[{"name":"headStart","nativeSrc":"6161:9:7","nodeType":"YulIdentifier","src":"6161:9:7"},{"kind":"number","nativeSrc":"6172:2:7","nodeType":"YulLiteral","src":"6172:2:7","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"6157:3:7","nodeType":"YulIdentifier","src":"6157:3:7"},"nativeSrc":"6157:18:7","nodeType":"YulFunctionCall","src":"6157:18:7"},"variableNames":[{"name":"tail","nativeSrc":"6149:4:7","nodeType":"YulIdentifier","src":"6149:4:7"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"6191:9:7","nodeType":"YulIdentifier","src":"6191:9:7"},{"arguments":[{"name":"value0","nativeSrc":"6206:6:7","nodeType":"YulIdentifier","src":"6206:6:7"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"6222:3:7","nodeType":"YulLiteral","src":"6222:3:7","type":"","value":"160"},{"kind":"number","nativeSrc":"6227:1:7","nodeType":"YulLiteral","src":"6227:1:7","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"6218:3:7","nodeType":"YulIdentifier","src":"6218:3:7"},"nativeSrc":"6218:11:7","nodeType":"YulFunctionCall","src":"6218:11:7"},{"kind":"number","nativeSrc":"6231:1:7","nodeType":"YulLiteral","src":"6231:1:7","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"6214:3:7","nodeType":"YulIdentifier","src":"6214:3:7"},"nativeSrc":"6214:19:7","nodeType":"YulFunctionCall","src":"6214:19:7"}],"functionName":{"name":"and","nativeSrc":"6202:3:7","nodeType":"YulIdentifier","src":"6202:3:7"},"nativeSrc":"6202:32:7","nodeType":"YulFunctionCall","src":"6202:32:7"}],"functionName":{"name":"mstore","nativeSrc":"6184:6:7","nodeType":"YulIdentifier","src":"6184:6:7"},"nativeSrc":"6184:51:7","nodeType":"YulFunctionCall","src":"6184:51:7"},"nativeSrc":"6184:51:7","nodeType":"YulExpressionStatement","src":"6184:51:7"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6255:9:7","nodeType":"YulIdentifier","src":"6255:9:7"},{"kind":"number","nativeSrc":"6266:2:7","nodeType":"YulLiteral","src":"6266:2:7","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6251:3:7","nodeType":"YulIdentifier","src":"6251:3:7"},"nativeSrc":"6251:18:7","nodeType":"YulFunctionCall","src":"6251:18:7"},{"name":"value1","nativeSrc":"6271:6:7","nodeType":"YulIdentifier","src":"6271:6:7"}],"functionName":{"name":"mstore","nativeSrc":"6244:6:7","nodeType":"YulIdentifier","src":"6244:6:7"},"nativeSrc":"6244:34:7","nodeType":"YulFunctionCall","src":"6244:34:7"},"nativeSrc":"6244:34:7","nodeType":"YulExpressionStatement","src":"6244:34:7"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6298:9:7","nodeType":"YulIdentifier","src":"6298:9:7"},{"kind":"number","nativeSrc":"6309:2:7","nodeType":"YulLiteral","src":"6309:2:7","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6294:3:7","nodeType":"YulIdentifier","src":"6294:3:7"},"nativeSrc":"6294:18:7","nodeType":"YulFunctionCall","src":"6294:18:7"},{"name":"value2","nativeSrc":"6314:6:7","nodeType":"YulIdentifier","src":"6314:6:7"}],"functionName":{"name":"mstore","nativeSrc":"6287:6:7","nodeType":"YulIdentifier","src":"6287:6:7"},"nativeSrc":"6287:34:7","nodeType":"YulFunctionCall","src":"6287:34:7"},"nativeSrc":"6287:34:7","nodeType":"YulExpressionStatement","src":"6287:34:7"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"5982:345:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6092:9:7","nodeType":"YulTypedName","src":"6092:9:7","type":""},{"name":"value2","nativeSrc":"6103:6:7","nodeType":"YulTypedName","src":"6103:6:7","type":""},{"name":"value1","nativeSrc":"6111:6:7","nodeType":"YulTypedName","src":"6111:6:7","type":""},{"name":"value0","nativeSrc":"6119:6:7","nodeType":"YulTypedName","src":"6119:6:7","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"6130:4:7","nodeType":"YulTypedName","src":"6130:4:7","type":""}],"src":"5982:345:7"},{"body":{"nativeSrc":"6380:174:7","nodeType":"YulBlock","src":"6380:174:7","statements":[{"nativeSrc":"6390:16:7","nodeType":"YulAssignment","src":"6390:16:7","value":{"arguments":[{"name":"x","nativeSrc":"6401:1:7","nodeType":"YulIdentifier","src":"6401:1:7"},{"name":"y","nativeSrc":"6404:1:7","nodeType":"YulIdentifier","src":"6404:1:7"}],"functionName":{"name":"add","nativeSrc":"6397:3:7","nodeType":"YulIdentifier","src":"6397:3:7"},"nativeSrc":"6397:9:7","nodeType":"YulFunctionCall","src":"6397:9:7"},"variableNames":[{"name":"sum","nativeSrc":"6390:3:7","nodeType":"YulIdentifier","src":"6390:3:7"}]},{"body":{"nativeSrc":"6437:111:7","nodeType":"YulBlock","src":"6437:111:7","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6458:1:7","nodeType":"YulLiteral","src":"6458:1:7","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"6465:3:7","nodeType":"YulLiteral","src":"6465:3:7","type":"","value":"224"},{"kind":"number","nativeSrc":"6470:10:7","nodeType":"YulLiteral","src":"6470:10:7","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"6461:3:7","nodeType":"YulIdentifier","src":"6461:3:7"},"nativeSrc":"6461:20:7","nodeType":"YulFunctionCall","src":"6461:20:7"}],"functionName":{"name":"mstore","nativeSrc":"6451:6:7","nodeType":"YulIdentifier","src":"6451:6:7"},"nativeSrc":"6451:31:7","nodeType":"YulFunctionCall","src":"6451:31:7"},"nativeSrc":"6451:31:7","nodeType":"YulExpressionStatement","src":"6451:31:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"6502:1:7","nodeType":"YulLiteral","src":"6502:1:7","type":"","value":"4"},{"kind":"number","nativeSrc":"6505:4:7","nodeType":"YulLiteral","src":"6505:4:7","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"6495:6:7","nodeType":"YulIdentifier","src":"6495:6:7"},"nativeSrc":"6495:15:7","nodeType":"YulFunctionCall","src":"6495:15:7"},"nativeSrc":"6495:15:7","nodeType":"YulExpressionStatement","src":"6495:15:7"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"6530:1:7","nodeType":"YulLiteral","src":"6530:1:7","type":"","value":"0"},{"kind":"number","nativeSrc":"6533:4:7","nodeType":"YulLiteral","src":"6533:4:7","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"6523:6:7","nodeType":"YulIdentifier","src":"6523:6:7"},"nativeSrc":"6523:15:7","nodeType":"YulFunctionCall","src":"6523:15:7"},"nativeSrc":"6523:15:7","nodeType":"YulExpressionStatement","src":"6523:15:7"}]},"condition":{"arguments":[{"name":"x","nativeSrc":"6421:1:7","nodeType":"YulIdentifier","src":"6421:1:7"},{"name":"sum","nativeSrc":"6424:3:7","nodeType":"YulIdentifier","src":"6424:3:7"}],"functionName":{"name":"gt","nativeSrc":"6418:2:7","nodeType":"YulIdentifier","src":"6418:2:7"},"nativeSrc":"6418:10:7","nodeType":"YulFunctionCall","src":"6418:10:7"},"nativeSrc":"6415:133:7","nodeType":"YulIf","src":"6415:133:7"}]},"name":"checked_add_t_uint256","nativeSrc":"6332:222:7","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"6363:1:7","nodeType":"YulTypedName","src":"6363:1:7","type":""},{"name":"y","nativeSrc":"6366:1:7","nodeType":"YulTypedName","src":"6366:1:7","type":""}],"returnVariables":[{"name":"sum","nativeSrc":"6372:3:7","nodeType":"YulTypedName","src":"6372:3:7","type":""}],"src":"6332:222:7"}]},"contents":"{\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        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), 32)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let value := 0\n        value := calldataload(add(headStart, 32))\n        value1 := 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_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        let value := 0\n        value := calldataload(add(headStart, 64))\n        value2 := 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 panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_array_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_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let length := calldataload(offset)\n        let dst := allocate_memory(array_allocation_size_array_address_dyn(length))\n        let array_1 := dst\n        mstore(dst, length)\n        dst := add(dst, 0x20)\n        let srcEnd := add(add(offset, shl(5, length)), 0x20)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, 0x20)\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            let value := 0\n            value := calldataload(src)\n            mstore(dst, value)\n            dst := add(dst, 0x20)\n        }\n        array := array_1\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_1)\n        let dst := allocate_memory(array_allocation_size_array_address_dyn(length))\n        let array := dst\n        mstore(dst, length)\n        dst := add(dst, 0x20)\n        let srcEnd := add(add(_1, shl(5, length)), 0x20)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_1, 0x20)\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            mstore(dst, abi_decode_address(src))\n            dst := add(dst, 0x20)\n        }\n        value0 := array\n        let offset_1 := calldataload(add(headStart, 0x20))\n        if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) }\n        value1 := abi_decode_array_uint256_dyn(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_582fd48f3876d7686bfeaaaa0db0589073271dedd50d66094f02fee2a3d2e01c__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), \"Arrays length mismatch\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n}","id":7,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a08231116100975780639dc29fac116100665780639dc29fac146101fb578063a9059cbb1461020e578063dd62ed3e14610221578063f2fde38b1461025a57600080fd5b806370a08231146101a7578063715018a6146101d05780638da5cb5b146101d857806395d89b41146101f357600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce5671461016057806340c10f191461017f578063685731071461019457600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b61010261026d565b60405161010f9190610855565b60405180910390f35b61012b6101263660046108bf565b6102ff565b604051901515815260200161010f565b6002545b60405190815260200161010f565b61012b61015b3660046108e9565b610319565b600554600160a01b900460ff1660405160ff909116815260200161010f565b61019261018d3660046108bf565b61033d565b005b6101926101a23660046109fe565b610353565b61013f6101b5366004610ac7565b6001600160a01b031660009081526020819052604090205490565b6101926103ff565b6005546040516001600160a01b03909116815260200161010f565b610102610413565b6101926102093660046108bf565b610422565b61012b61021c3660046108bf565b610434565b61013f61022f366004610ae9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610192610268366004610ac7565b610442565b60606003805461027c90610b1c565b80601f01602080910402602001604051908101604052809291908181526020018280546102a890610b1c565b80156102f55780601f106102ca576101008083540402835291602001916102f5565b820191906000526020600020905b8154815290600101906020018083116102d857829003601f168201915b5050505050905090565b60003361030d818585610480565b60019150505b92915050565b60003361032785828561048d565b61033285858561050c565b506001949350505050565b61034561056b565b61034f8282610598565b5050565b61035b61056b565b80518251146103aa5760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064015b60405180910390fd5b60005b82518110156103fa576103f28382815181106103cb576103cb610b56565b60200260200101518383815181106103e5576103e5610b56565b6020026020010151610598565b6001016103ad565b505050565b61040761056b565b61041160006105ce565b565b60606004805461027c90610b1c565b61042a61056b565b61034f8282610620565b60003361030d81858561050c565b61044a61056b565b6001600160a01b03811661047457604051631e4fbdf760e01b8152600060048201526024016103a1565b61047d816105ce565b50565b6103fa8383836001610656565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981101561050657818110156104f757604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103a1565b61050684848484036000610656565b50505050565b6001600160a01b03831661053657604051634b637e8f60e11b8152600060048201526024016103a1565b6001600160a01b0382166105605760405163ec442f0560e01b8152600060048201526024016103a1565b6103fa83838361072b565b6005546001600160a01b031633146104115760405163118cdaa760e01b81523360048201526024016103a1565b6001600160a01b0382166105c25760405163ec442f0560e01b8152600060048201526024016103a1565b61034f6000838361072b565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661064a57604051634b637e8f60e11b8152600060048201526024016103a1565b61034f8260008361072b565b6001600160a01b0384166106805760405163e602df0560e01b8152600060048201526024016103a1565b6001600160a01b0383166106aa57604051634a1406b160e11b8152600060048201526024016103a1565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561050657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161071d91815260200190565b60405180910390a350505050565b6001600160a01b03831661075657806002600082825461074b9190610b6c565b909155506107c89050565b6001600160a01b038316600090815260208190526040902054818110156107a95760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103a1565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166107e457600280548290039055610803565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161084891815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156108835760208186018101516040868401015201610866565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146108ba57600080fd5b919050565b600080604083850312156108d257600080fd5b6108db836108a3565b946020939093013593505050565b6000806000606084860312156108fe57600080fd5b610907846108a3565b9250610915602085016108a3565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561096557610965610926565b604052919050565b600067ffffffffffffffff82111561098757610987610926565b5060051b60200190565b600082601f8301126109a257600080fd5b81356109b56109b08261096d565b61093c565b8082825260208201915060208360051b8601019250858311156109d757600080fd5b602085015b838110156109f45780358352602092830192016109dc565b5095945050505050565b60008060408385031215610a1157600080fd5b823567ffffffffffffffff811115610a2857600080fd5b8301601f81018513610a3957600080fd5b8035610a476109b08261096d565b8082825260208201915060208360051b850101925087831115610a6957600080fd5b6020840193505b82841015610a9257610a81846108a3565b825260209384019390910190610a70565b9450505050602083013567ffffffffffffffff811115610ab157600080fd5b610abd85828601610991565b9150509250929050565b600060208284031215610ad957600080fd5b610ae2826108a3565b9392505050565b60008060408385031215610afc57600080fd5b610b05836108a3565b9150610b13602084016108a3565b90509250929050565b600181811c90821680610b3057607f821691505b602082108103610b5057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b8082018082111561031357634e487b7160e01b600052601160045260246000fdfea2646970667358221220e1290b96e57f4acc109d889a1d12169bef2020982f3fb3256de6c0f120a1ff0164736f6c634300081c0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xF5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0x9DC29FAC GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x221 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x25A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1D0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1D8 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x160 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0x68573107 EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x118 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x13B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x102 PUSH2 0x26D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10F SWAP2 SWAP1 PUSH2 0x855 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x12B PUSH2 0x126 CALLDATASIZE PUSH1 0x4 PUSH2 0x8BF JUMP JUMPDEST PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10F JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10F JUMP JUMPDEST PUSH2 0x12B PUSH2 0x15B CALLDATASIZE PUSH1 0x4 PUSH2 0x8E9 JUMP JUMPDEST PUSH2 0x319 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10F JUMP JUMPDEST PUSH2 0x192 PUSH2 0x18D CALLDATASIZE PUSH1 0x4 PUSH2 0x8BF JUMP JUMPDEST PUSH2 0x33D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x192 PUSH2 0x1A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x9FE JUMP JUMPDEST PUSH2 0x353 JUMP JUMPDEST PUSH2 0x13F PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x192 PUSH2 0x3FF JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10F JUMP JUMPDEST PUSH2 0x102 PUSH2 0x413 JUMP JUMPDEST PUSH2 0x192 PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0x8BF JUMP JUMPDEST PUSH2 0x422 JUMP JUMPDEST PUSH2 0x12B PUSH2 0x21C CALLDATASIZE PUSH1 0x4 PUSH2 0x8BF JUMP JUMPDEST PUSH2 0x434 JUMP JUMPDEST PUSH2 0x13F PUSH2 0x22F CALLDATASIZE PUSH1 0x4 PUSH2 0xAE9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x192 PUSH2 0x268 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC7 JUMP JUMPDEST PUSH2 0x442 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x27C SWAP1 PUSH2 0xB1C 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 0x2A8 SWAP1 PUSH2 0xB1C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2F5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2CA JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2F5 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 0x2D8 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x30D DUP2 DUP6 DUP6 PUSH2 0x480 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x327 DUP6 DUP3 DUP6 PUSH2 0x48D JUMP JUMPDEST PUSH2 0x332 DUP6 DUP6 DUP6 PUSH2 0x50C JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x345 PUSH2 0x56B JUMP JUMPDEST PUSH2 0x34F DUP3 DUP3 PUSH2 0x598 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x35B PUSH2 0x56B JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH2 0x3AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x82E4E4C2F2E640D8CADCCEE8D040DAD2E6DAC2E8C6D PUSH1 0x53 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x3FA JUMPI PUSH2 0x3F2 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3CB JUMPI PUSH2 0x3CB PUSH2 0xB56 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3E5 JUMPI PUSH2 0x3E5 PUSH2 0xB56 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x598 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3AD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x407 PUSH2 0x56B JUMP JUMPDEST PUSH2 0x411 PUSH1 0x0 PUSH2 0x5CE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x27C SWAP1 PUSH2 0xB1C JUMP JUMPDEST PUSH2 0x42A PUSH2 0x56B JUMP JUMPDEST PUSH2 0x34F DUP3 DUP3 PUSH2 0x620 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x30D DUP2 DUP6 DUP6 PUSH2 0x50C JUMP JUMPDEST PUSH2 0x44A PUSH2 0x56B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x474 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x47D DUP2 PUSH2 0x5CE JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x3FA DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x656 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0x0 NOT DUP2 LT ISZERO PUSH2 0x506 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x4F7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7DC7A0D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x506 DUP5 DUP5 DUP5 DUP5 SUB PUSH1 0x0 PUSH2 0x656 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x536 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x560 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x3FA DUP4 DUP4 DUP4 PUSH2 0x72B JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x411 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5C2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x34F PUSH1 0x0 DUP4 DUP4 PUSH2 0x72B JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x64A JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x34F DUP3 PUSH1 0x0 DUP4 PUSH2 0x72B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x680 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE602DF05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6AA JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A1406B1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x506 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 PUSH1 0x40 MLOAD PUSH2 0x71D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x756 JUMPI DUP1 PUSH1 0x2 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x74B SWAP2 SWAP1 PUSH2 0xB6C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x7C8 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x7A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x391434E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP3 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7E4 JUMPI PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 SUB SWAP1 SSTORE PUSH2 0x803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 ADD SWAP1 SSTORE JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x848 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x883 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD PUSH1 0x40 DUP7 DUP5 ADD ADD MSTORE ADD PUSH2 0x866 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP6 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x8BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8DB DUP4 PUSH2 0x8A3 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 0x8FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x907 DUP5 PUSH2 0x8A3 JUMP JUMPDEST SWAP3 POP PUSH2 0x915 PUSH1 0x20 DUP6 ADD PUSH2 0x8A3 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x965 JUMPI PUSH2 0x965 PUSH2 0x926 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x987 JUMPI PUSH2 0x987 PUSH2 0x926 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x9A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x9B5 PUSH2 0x9B0 DUP3 PUSH2 0x96D JUMP JUMPDEST PUSH2 0x93C JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP DUP6 DUP4 GT ISZERO PUSH2 0x9D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9F4 JUMPI DUP1 CALLDATALOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x9DC JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xA11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xA47 PUSH2 0x9B0 DUP3 PUSH2 0x96D JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 DUP4 GT ISZERO PUSH2 0xA69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP5 ADD SWAP4 POP JUMPDEST DUP3 DUP5 LT ISZERO PUSH2 0xA92 JUMPI PUSH2 0xA81 DUP5 PUSH2 0x8A3 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xA70 JUMP JUMPDEST SWAP5 POP POP POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xABD DUP6 DUP3 DUP7 ADD PUSH2 0x991 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAE2 DUP3 PUSH2 0x8A3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB05 DUP4 PUSH2 0x8A3 JUMP JUMPDEST SWAP2 POP PUSH2 0xB13 PUSH1 0x20 DUP5 ADD PUSH2 0x8A3 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xB30 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xB50 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x313 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE1 0x29 SIGNEXTEND SWAP7 0xE5 PUSH32 0x4ACC109D889A1D12169BEF2020982F3FB3256DE6C0F120A1FF0164736F6C6343 STOP ADDMOD SHR STOP CALLER ","sourceMap":"246:1498:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3979:186;;;;;;:::i;:::-;;:::i;:::-;;;1194:14:7;;1187:22;1169:41;;1157:2;1142:18;3979:186:2;1029:187:7;2830:97:2;2908:12;;2830:97;;;1367:25:7;;;1355:2;1340:18;2830:97:2;1221:177:7;4757:244:2;;;;;;:::i;:::-;;:::i;632:98:6:-;714:9;;-1:-1:-1;;;714:9:6;;;;632:98;;1954:4:7;1942:17;;;1924:36;;1912:2;1897:18;632:98:6;1782:184:7;886:95:6;;;;;;:::i;:::-;;:::i;:::-;;1425:317;;;;;;:::i;:::-;;:::i;2985:116:2:-;;;;;;:::i;:::-;-1:-1:-1;;;;;3076:18:2;3050:7;3076:18;;;;;;;;;;;;2985:116;2293:101:0;;;:::i;1638:85::-;1710:6;;1638:85;;-1:-1:-1;;;;;1710:6:0;;;4787:51:7;;4775:2;4760:18;1638:85:0;4641:203:7;1962:93:2;;;:::i;1143:99:6:-;;;;;;:::i;:::-;;:::i;3296:178:2:-;;;;;;:::i;:::-;;:::i;3532:140::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3638:18:2;;;3612:7;3638:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3532:140;2543:215:0;;;;;;:::i;:::-;;:::i;1760:89:2:-;1805:13;1837:5;1830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89;:::o;3979:186::-;4052:4;735:10:5;4106:31:2;735:10:5;4122:7:2;4131:5;4106:8;:31::i;:::-;4154:4;4147:11;;;3979:186;;;;;:::o;4757:244::-;4844:4;735:10:5;4900:37:2;4916:4;735:10:5;4931:5:2;4900:15;:37::i;:::-;4947:26;4957:4;4963:2;4967:5;4947:9;:26::i;:::-;-1:-1:-1;4990:4:2;;4757:244;-1:-1:-1;;;;4757:244:2:o;886:95:6:-;1531:13:0;:11;:13::i;:::-;957:17:6::1;963:2;967:6;957:5;:17::i;:::-;886:95:::0;;:::o;1425:317::-;1531:13:0;:11;:13::i;:::-;1579:7:6::1;:14;1558:10;:17;:35;1550:70;;;::::0;-1:-1:-1;;;1550:70:6;;5701:2:7;1550:70:6::1;::::0;::::1;5683:21:7::0;5740:2;5720:18;;;5713:30;-1:-1:-1;;;5759:18:7;;;5752:52;5821:18;;1550:70:6::1;;;;;;;;;1636:9;1631:105;1655:10;:17;1651:1;:21;1631:105;;;1693:32;1699:10;1710:1;1699:13;;;;;;;;:::i;:::-;;;;;;;1714:7;1722:1;1714:10;;;;;;;;:::i;:::-;;;;;;;1693:5;:32::i;:::-;1674:3;;1631:105;;;;1425:317:::0;;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1962:93:2:-;2009:13;2041:7;2034:14;;;;;:::i;1143:99:6:-;1531:13:0;:11;:13::i;:::-;1216:19:6::1;1222:4;1228:6;1216:5;:19::i;3296:178:2:-:0;3365:4;735:10:5;3419:27:2;735:10:5;3436:2:2;3440:5;3419:9;:27::i;2543:215:0:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:0;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:0;;2700:1:::1;2672:31;::::0;::::1;4787:51:7::0;4760:18;;2672:31:0::1;4641:203:7::0;2623:91:0::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;8707:128:2:-;8791:37;8800:5;8807:7;8816:5;8823:4;8791:8;:37::i;10396:476::-;-1:-1:-1;;;;;3638:18:2;;;10495:24;3638:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10561:36:2;;10557:309;;;10636:5;10617:16;:24;10613:130;;;10668:60;;-1:-1:-1;;;10668:60:2;;-1:-1:-1;;;;;6202:32:7;;10668:60:2;;;6184:51:7;6251:18;;;6244:34;;;6294:18;;;6287:34;;;6157:18;;10668:60:2;5982:345:7;10613:130:2;10784:57;10793:5;10800:7;10828:5;10809:16;:24;10835:5;10784:8;:57::i;:::-;10485:387;10396:476;;;:::o;5374:300::-;-1:-1:-1;;;;;5457:18:2;;5453:86;;5498:30;;-1:-1:-1;;;5498:30:2;;5525:1;5498:30;;;4787:51:7;4760:18;;5498:30:2;4641:203:7;5453:86:2;-1:-1:-1;;;;;5552:16:2;;5548:86;;5591:32;;-1:-1:-1;;;5591:32:2;;5620:1;5591:32;;;4787:51:7;4760:18;;5591:32:2;4641:203:7;5548:86:2;5643:24;5651:4;5657:2;5661:5;5643:7;:24::i;1796:162:0:-;1710:6;;-1:-1:-1;;;;;1710:6:0;735:10:5;1855:23:0;1851:101;;1901:40;;-1:-1:-1;;;1901:40:0;;735:10:5;1901:40:0;;;4787:51:7;4760:18;;1901:40:0;4641:203:7;7439:208:2;-1:-1:-1;;;;;7509:21:2;;7505:91;;7553:32;;-1:-1:-1;;;7553:32:2;;7582:1;7553:32;;;4787:51:7;4760:18;;7553:32:2;4641:203:7;7505:91:2;7605:35;7621:1;7625:7;7634:5;7605:7;:35::i;2912:187:0:-;3004:6;;;-1:-1:-1;;;;;3020:17:0;;;-1:-1:-1;;;;;;3020:17:0;;;;;;;3052:40;;3004:6;;;3020:17;3004:6;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;7965:206:2:-;-1:-1:-1;;;;;8035:21:2;;8031:89;;8079:30;;-1:-1:-1;;;8079:30:2;;8106:1;8079:30;;;4787:51:7;4760:18;;8079:30:2;4641:203:7;8031:89:2;8129:35;8137:7;8154:1;8158:5;8129:7;:35::i;9682:432::-;-1:-1:-1;;;;;9794:19:2;;9790:89;;9836:32;;-1:-1:-1;;;9836:32:2;;9865:1;9836:32;;;4787:51:7;4760:18;;9836:32:2;4641:203:7;9790:89:2;-1:-1:-1;;;;;9892:21:2;;9888:90;;9936:31;;-1:-1:-1;;;9936:31:2;;9964:1;9936:31;;;4787:51:7;4760:18;;9936:31:2;4641:203:7;9888:90:2;-1:-1:-1;;;;;9987:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10032:76;;;;10082:7;-1:-1:-1;;;;;10066:31:2;10075:5;-1:-1:-1;;;;;10066:31:2;;10091:5;10066:31;;;;1367:25:7;;1355:2;1340:18;;1221:177;10066:31:2;;;;;;;;9682:432;;;;:::o;5989:1107::-;-1:-1:-1;;;;;6078:18:2;;6074:540;;6230:5;6214:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6074:540:2;;-1:-1:-1;6074:540:2;;-1:-1:-1;;;;;6288:15:2;;6266:19;6288:15;;;;;;;;;;;6321:19;;;6317:115;;;6367:50;;-1:-1:-1;;;6367:50:2;;-1:-1:-1;;;;;6202:32:7;;6367:50:2;;;6184:51:7;6251:18;;;6244:34;;;6294:18;;;6287:34;;;6157:18;;6367:50:2;5982:345:7;6317:115:2;-1:-1:-1;;;;;6552:15:2;;:9;:15;;;;;;;;;;6570:19;;;;6552:37;;6074:540;-1:-1:-1;;;;;6628:16:2;;6624:425;;6791:12;:21;;;;;;;6624:425;;;-1:-1:-1;;;;;7002:13:2;;:9;:13;;;;;;;;;;:22;;;;;;6624:425;7079:2;-1:-1:-1;;;;;7064:25:2;7073:4;-1:-1:-1;;;;;7064:25:2;;7083:5;7064:25;;;;1367::7;;1355:2;1340:18;;1221:177;7064:25:2;;;;;;;;5989:1107;;;:::o;14:527:7:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;263:1;273:140;287:6;284:1;281:13;273:140;;;398:2;382:14;;;378:23;;372:30;367:2;348:17;;;344:26;337:66;302:10;273:140;;;277:3;462:1;457:2;448:6;437:9;433:22;429:31;422:42;532:2;525;521:7;516:2;508:6;504:15;500:29;489:9;485:45;481:54;473:62;;;14:527;;;;:::o;546:173::-;614:20;;-1:-1:-1;;;;;663:31:7;;653:42;;643:70;;709:1;706;699:12;643:70;546:173;;;:::o;724:300::-;792:6;800;853:2;841:9;832:7;828:23;824:32;821:52;;;869:1;866;859:12;821:52;892:29;911:9;892:29;:::i;:::-;882:39;990:2;975:18;;;;962:32;;-1:-1:-1;;;724:300:7:o;1403:374::-;1480:6;1488;1496;1549:2;1537:9;1528:7;1524:23;1520:32;1517:52;;;1565:1;1562;1555:12;1517:52;1588:29;1607:9;1588:29;:::i;:::-;1578:39;;1636:38;1670:2;1659:9;1655:18;1636:38;:::i;:::-;1403:374;;1626:48;;-1:-1:-1;;;1743:2:7;1728:18;;;;1715:32;;1403:374::o;1971:127::-;2032:10;2027:3;2023:20;2020:1;2013:31;2063:4;2060:1;2053:15;2087:4;2084:1;2077:15;2103:275;2174:2;2168:9;2239:2;2220:13;;-1:-1:-1;;2216:27:7;2204:40;;2274:18;2259:34;;2295:22;;;2256:62;2253:88;;;2321:18;;:::i;:::-;2357:2;2350:22;2103:275;;-1:-1:-1;2103:275:7:o;2383:183::-;2443:4;2476:18;2468:6;2465:30;2462:56;;;2498:18;;:::i;:::-;-1:-1:-1;2543:1:7;2539:14;2555:4;2535:25;;2383:183::o;2571:723::-;2625:5;2678:3;2671:4;2663:6;2659:17;2655:27;2645:55;;2696:1;2693;2686:12;2645:55;2736:6;2723:20;2763:64;2779:47;2819:6;2779:47;:::i;:::-;2763:64;:::i;:::-;2851:3;2875:6;2870:3;2863:19;2907:4;2902:3;2898:14;2891:21;;2968:4;2958:6;2955:1;2951:14;2943:6;2939:27;2935:38;2921:52;;2996:3;2988:6;2985:15;2982:35;;;3013:1;3010;3003:12;2982:35;3049:4;3041:6;3037:17;3063:200;3079:6;3074:3;3071:15;3063:200;;;3171:17;;3201:18;;3248:4;3239:14;;;;3096;3063:200;;;-1:-1:-1;3281:7:7;2571:723;-1:-1:-1;;;;;2571:723:7:o;3299:1146::-;3417:6;3425;3478:2;3466:9;3457:7;3453:23;3449:32;3446:52;;;3494:1;3491;3484:12;3446:52;3534:9;3521:23;3567:18;3559:6;3556:30;3553:50;;;3599:1;3596;3589:12;3553:50;3622:22;;3675:4;3667:13;;3663:27;-1:-1:-1;3653:55:7;;3704:1;3701;3694:12;3653:55;3744:2;3731:16;3767:64;3783:47;3823:6;3783:47;:::i;3767:64::-;3853:3;3877:6;3872:3;3865:19;3909:4;3904:3;3900:14;3893:21;;3966:4;3956:6;3953:1;3949:14;3945:2;3941:23;3937:34;3923:48;;3994:7;3986:6;3983:19;3980:39;;;4015:1;4012;4005:12;3980:39;4047:4;4043:2;4039:13;4028:24;;4061:152;4077:6;4072:3;4069:15;4061:152;;;4145:23;4164:3;4145:23;:::i;:::-;4133:36;;4198:4;4094:14;;;;4189;;;;4061:152;;;4232:5;-1:-1:-1;;;;4290:4:7;4275:20;;4262:34;4321:18;4308:32;;4305:52;;;4353:1;4350;4343:12;4305:52;4376:63;4431:7;4420:8;4409:9;4405:24;4376:63;:::i;:::-;4366:73;;;3299:1146;;;;;:::o;4450:186::-;4509:6;4562:2;4550:9;4541:7;4537:23;4533:32;4530:52;;;4578:1;4575;4568:12;4530:52;4601:29;4620:9;4601:29;:::i;:::-;4591:39;4450:186;-1:-1:-1;;;4450:186:7:o;4849:260::-;4917:6;4925;4978:2;4966:9;4957:7;4953:23;4949:32;4946:52;;;4994:1;4991;4984:12;4946:52;5017:29;5036:9;5017:29;:::i;:::-;5007:39;;5065:38;5099:2;5088:9;5084:18;5065:38;:::i;:::-;5055:48;;4849:260;;;;;:::o;5114:380::-;5193:1;5189:12;;;;5236;;;5257:61;;5311:4;5303:6;5299:17;5289:27;;5257:61;5364:2;5356:6;5353:14;5333:18;5330:38;5327:161;;5410:10;5405:3;5401:20;5398:1;5391:31;5445:4;5442:1;5435:15;5473:4;5470:1;5463:15;5327:161;;5114:380;;;:::o;5850:127::-;5911:10;5906:3;5902:20;5899:1;5892:31;5942:4;5939:1;5932:15;5966:4;5963:1;5956:15;6332:222;6397:9;;;6418:10;;;6415:133;;;6470:10;6465:3;6461:20;6458:1;6451:31;6505:4;6502:1;6495:15;6533:4;6530:1;6523:15"},"gasEstimates":{"creation":{"codeDepositCost":"602200","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24762","balanceOf(address)":"2563","batchMint(address[],uint256[])":"infinite","burn(address,uint256)":"infinite","decimals()":"2357","mint(address,uint256)":"infinite","name()":"infinite","owner()":"2368","renounceOwnership()":"infinite","symbol()":"infinite","totalSupply()":"2349","transfer(address,uint256)":"51266","transferFrom(address,address,uint256)":"infinite","transferOwnership(address)":"28424"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","batchMint(address[],uint256[])":"68573107","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","mint(address,uint256)":"40c10f19","name()":"06fdde03","owner()":"8da5cb5b","renounceOwnership()":"715018a6","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"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\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"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\":[{\"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\":\"value\",\"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\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"batchMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"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\":\"Test ERC20 token for VideoPayment testing\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"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\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"batchMint(address[],uint256[])\":{\"details\":\"Batch mint tokens to multiple addresses\",\"params\":{\"amounts\":\"Array of amounts to mint\",\"recipients\":\"Array of addresses to mint tokens to\"}},\"burn(address,uint256)\":{\"details\":\"Burn tokens from specified address\",\"params\":{\"amount\":\"Amount of tokens to burn\",\"from\":\"Address to burn tokens from\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation.\"},\"mint(address,uint256)\":{\"details\":\"Mint tokens to specified address\",\"params\":{\"amount\":\"Amount of tokens to mint\",\"to\":\"Address to mint tokens to\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"MockERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/MockERC20.sol\":\"MockERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    /**\\n     * @dev The caller account is not authorized to perform an operation.\\n     */\\n    error OwnableUnauthorizedAccount(address account);\\n\\n    /**\\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n     */\\n    error OwnableInvalidOwner(address owner);\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n     */\\n    constructor(address initialOwner) {\\n        if (initialOwner == address(0)) {\\n            revert OwnableInvalidOwner(address(0));\\n        }\\n        _transferOwnership(initialOwner);\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        if (owner() != _msgSender()) {\\n            revert OwnableUnauthorizedAccount(_msgSender());\\n        }\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        if (newOwner == address(0)) {\\n            revert OwnableInvalidOwner(address(0));\\n        }\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n    /**\\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param balance Current balance for the interacting account.\\n     * @param needed Minimum amount required to perform a transfer.\\n     */\\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC20InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC20InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n     * @param needed Minimum amount required to perform a transfer.\\n     */\\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC20InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n    /**\\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n     * Used in balance queries.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC721InvalidOwner(address owner);\\n\\n    /**\\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC721NonexistentToken(uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param tokenId Identifier number of a token.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC721InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC721InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC721InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n    /**\\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     * @param balance Current balance for the interacting account.\\n     * @param needed Minimum amount required to perform a transfer.\\n     * @param tokenId Identifier number of a token.\\n     */\\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n    /**\\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\\n     * @param sender Address whose tokens are being transferred.\\n     */\\n    error ERC1155InvalidSender(address sender);\\n\\n    /**\\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n     * @param receiver Address to which tokens are being transferred.\\n     */\\n    error ERC1155InvalidReceiver(address receiver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     * @param owner Address of the current owner of a token.\\n     */\\n    error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n    /**\\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n     * @param approver Address initiating an approval operation.\\n     */\\n    error ERC1155InvalidApprover(address approver);\\n\\n    /**\\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\\n     */\\n    error ERC1155InvalidOperator(address operator);\\n\\n    /**\\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n     * Used in batch transfers.\\n     * @param idsLength Length of the array of token identifiers\\n     * @param valuesLength Length of the array of token amounts\\n     */\\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"./extensions/IERC20Metadata.sol\\\";\\nimport {Context} from \\\"../../utils/Context.sol\\\";\\nimport {IERC20Errors} from \\\"../../interfaces/draft-IERC6093.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 *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC-20\\n * applications.\\n */\\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\\n    mapping(address account => uint256) private _balances;\\n\\n    mapping(address account => mapping(address spender => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * Both values are immutable: they can only be set once during construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual 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 default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `value`.\\n     */\\n    function transfer(address to, uint256 value) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, value);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 value) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, value);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Skips emitting an {Approval} event indicating an allowance update. This is not\\n     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `value`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `value`.\\n     */\\n    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, value);\\n        _transfer(from, to, value);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\\n     */\\n    function _transfer(address from, address to, uint256 value) internal {\\n        if (from == address(0)) {\\n            revert ERC20InvalidSender(address(0));\\n        }\\n        if (to == address(0)) {\\n            revert ERC20InvalidReceiver(address(0));\\n        }\\n        _update(from, to, value);\\n    }\\n\\n    /**\\n     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\\n     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\\n     * this function.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function _update(address from, address to, uint256 value) internal virtual {\\n        if (from == address(0)) {\\n            // Overflow check required: The rest of the code assumes that totalSupply never overflows\\n            _totalSupply += value;\\n        } else {\\n            uint256 fromBalance = _balances[from];\\n            if (fromBalance < value) {\\n                revert ERC20InsufficientBalance(from, fromBalance, value);\\n            }\\n            unchecked {\\n                // Overflow not possible: value <= fromBalance <= totalSupply.\\n                _balances[from] = fromBalance - value;\\n            }\\n        }\\n\\n        if (to == address(0)) {\\n            unchecked {\\n                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\\n                _totalSupply -= value;\\n            }\\n        } else {\\n            unchecked {\\n                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\\n                _balances[to] += value;\\n            }\\n        }\\n\\n        emit Transfer(from, to, value);\\n    }\\n\\n    /**\\n     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\\n     * Relies on the `_update` mechanism\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\\n     */\\n    function _mint(address account, uint256 value) internal {\\n        if (account == address(0)) {\\n            revert ERC20InvalidReceiver(address(0));\\n        }\\n        _update(address(0), account, value);\\n    }\\n\\n    /**\\n     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\\n     * Relies on the `_update` mechanism.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * NOTE: This function is not virtual, {_update} should be overridden instead\\n     */\\n    function _burn(address account, uint256 value) internal {\\n        if (account == address(0)) {\\n            revert ERC20InvalidSender(address(0));\\n        }\\n        _update(account, address(0), value);\\n    }\\n\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     *\\n     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\\n     */\\n    function _approve(address owner, address spender, uint256 value) internal {\\n        _approve(owner, spender, value, true);\\n    }\\n\\n    /**\\n     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\\n     *\\n     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\\n     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\\n     * `Approval` event during `transferFrom` operations.\\n     *\\n     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\\n     * true using the following override:\\n     *\\n     * ```solidity\\n     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\\n     *     super._approve(owner, spender, value, true);\\n     * }\\n     * ```\\n     *\\n     * Requirements are the same as {_approve}.\\n     */\\n    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\\n        if (owner == address(0)) {\\n            revert ERC20InvalidApprover(address(0));\\n        }\\n        if (spender == address(0)) {\\n            revert ERC20InvalidSpender(address(0));\\n        }\\n        _allowances[owner][spender] = value;\\n        if (emitEvent) {\\n            emit Approval(owner, spender, value);\\n        }\\n    }\\n\\n    /**\\n     * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\\n     *\\n     * Does not update the allowance value in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Does not emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance < type(uint256).max) {\\n            if (currentAllowance < value) {\\n                revert ERC20InsufficientAllowance(spender, currentAllowance, value);\\n            }\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - value, false);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x41f6b3b9e030561e7896dbef372b499cc8d418a80c3884a4d65a68f2fdc7493a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the value of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the value of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 value) 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 a `value` amount of tokens as the allowance of `spender` over the\\n     * 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 value) external returns (bool);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n     * allowance mechanism. `value` 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 from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"contracts/MockERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @title MockERC20\\n * @dev Test ERC20 token for VideoPayment testing\\n */\\ncontract MockERC20 is ERC20, Ownable {\\n    uint8 private _decimals;\\n\\n    constructor(\\n        string memory name,\\n        string memory symbol,\\n        uint8 decimals_,\\n        address initialOwner\\n    ) ERC20(name, symbol) Ownable(initialOwner) {\\n        _decimals = decimals_;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return _decimals;\\n    }\\n\\n    /**\\n     * @dev Mint tokens to specified address\\n     * @param to Address to mint tokens to\\n     * @param amount Amount of tokens to mint\\n     */\\n    function mint(address to, uint256 amount) external onlyOwner {\\n        _mint(to, amount);\\n    }\\n\\n    /**\\n     * @dev Burn tokens from specified address\\n     * @param from Address to burn tokens from\\n     * @param amount Amount of tokens to burn\\n     */\\n    function burn(address from, uint256 amount) external onlyOwner {\\n        _burn(from, amount);\\n    }\\n\\n    /**\\n     * @dev Batch mint tokens to multiple addresses\\n     * @param recipients Array of addresses to mint tokens to\\n     * @param amounts Array of amounts to mint\\n     */\\n    function batchMint(\\n        address[] memory recipients,\\n        uint256[] memory amounts\\n    ) external onlyOwner {\\n        require(recipients.length == amounts.length, \\\"Arrays length mismatch\\\");\\n\\n        for (uint256 i = 0; i < recipients.length; i++) {\\n            _mint(recipients[i], amounts[i]);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x049c36eb1819dd9e10254ad180cd612def658bb4a1eb96d7be0ee4b5f120d2dd\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":307,"contract":"contracts/MockERC20.sol:MockERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":313,"contract":"contracts/MockERC20.sol:MockERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":315,"contract":"contracts/MockERC20.sol:MockERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":317,"contract":"contracts/MockERC20.sol:MockERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":319,"contract":"contracts/MockERC20.sol:MockERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":8,"contract":"contracts/MockERC20.sol:MockERC20","label":"_owner","offset":0,"slot":"5","type":"t_address"},{"astId":944,"contract":"contracts/MockERC20.sol:MockERC20","label":"_decimals","offset":20,"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}}}}}}