{
  "id": "0ab03cfeb9473be8ab4559390ba3cbdf",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.8.4",
  "solcLongVersion": "0.8.4+commit.c7e474f2",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/NFTPromolider.sol": {
        "content": "// SPDX-License-Identifier: Unlicense\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol\";\nimport \"@openzeppelin/contracts/utils/Counters.sol\";\n\ncontract NFTPromolider is ERC721URIStorage {\n    using Counters for Counters.Counter;\n\n    Counters.Counter private _tokenIds;\n    Counters.Counter private _itemsSold;\n\n    address payable public owner;\n    uint256 public listPrice = 550000000;\n    uint256 public maxSupply = 100;\n\n    event TokenLocked(\n        uint256 indexed tokenId,\n        address indexed owner,\n        string destinationNetwork,\n        address destinationAddress\n    );\n    \n    enum Collection{\n        CollectionA,\n        CollectionB,\n        CollectionC\n    }\n\n    struct ListedToken {\n        uint256 tokenId;\n        address payable owner;\n        address payable seller;\n        uint256 price;\n        bool currentlyListed;\n        Collection collection;  \n    }\n\n    struct TokenHistory {\n        address owner;\n        uint256 price;\n        uint256 timestamp;\n    }\n    \n    mapping(uint256 => address) private lockedTokenOwners;\n    mapping(uint256 => ListedToken) private idToListedToken;\n    mapping(uint256 => TokenHistory[]) private idToTokenHistory;\n\n    event TokenUnlocked(uint256 indexed tokenId, address owner);\n    event TokenListedSuccess(\n        uint256 indexed tokenId,\n        address owner,\n        address seller,\n        uint256 price,\n        bool currentlyListed,\n        Collection collection  // Añadir colección al evento\n    );\n\n    event TokenSaleSuccess(\n        uint256 indexed tokenId,\n        address owner,\n        address seller,\n        uint256 price\n    );\n\n    constructor() ERC721(\"NFTPromolider\", \"NFTP\") {\n        owner = payable(msg.sender);\n    }\n\n    function updateListPrice(uint256 _listPrice) public {\n        require(owner == msg.sender, \"Only owner can update listing price\");\n        listPrice = _listPrice;\n    }\n\n    function getListedTokenForId(uint256 tokenId) public view returns (ListedToken memory) {\n        return idToListedToken[tokenId];\n    }\n\n    function getListPrice() public view returns (uint256) {\n        return listPrice;\n    }\n\n    function createToken(string memory tokenURI, uint256 price, Collection collection,bool isList) public payable returns (uint256) {\n        require(_tokenIds.current() < maxSupply,\"Nft max supply reached\");\n        require(collection == Collection.CollectionA || collection==Collection.CollectionB ||collection==Collection.CollectionC,\"Error\");\n        _tokenIds.increment();\n        uint256 newTokenId = _tokenIds.current();\n\n        _safeMint(msg.sender, newTokenId);\n        _setTokenURI(newTokenId, tokenURI);\n\n        createListedToken(newTokenId, price, collection,isList);\n\n        return newTokenId;\n    }\n\n    function createListedToken(uint256 tokenId, uint256 price, Collection collection,bool isList) private {\n        require(msg.value == listPrice, \"Incorrect price sent\");\n        require(price > 0, \"Price must be greater than zero\");\n\n        idToListedToken[tokenId] = ListedToken(\n            tokenId,\n            payable(msg.sender),\n            payable(address(0)),\n            price,\n            isList,\n            collection  \n        );\n\n        emit TokenListedSuccess(\n            tokenId,\n            msg.sender,\n            address(0),\n            price,\n            isList,\n            collection \n        );\n    }\n\n    function getAllNFTs() public view returns (ListedToken[] memory) {\n        uint nftCount = _tokenIds.current();\n        uint listedCount = 0;\n\n        for (uint i = 1; i <= nftCount; i++) {\n            if (idToListedToken[i].currentlyListed == true) {\n                listedCount++;\n            }\n        }\n\n        ListedToken[] memory tokens = new ListedToken[](listedCount);\n        uint currentIndex = 0;\n\n        for (uint i = 1; i <= nftCount; i++) {\n            if (idToListedToken[i].currentlyListed == true) {\n                tokens[currentIndex] = idToListedToken[i];\n                currentIndex++;\n            }\n        }\n\n        return tokens;\n    }\n\n    function getMyNFTs() public view returns (ListedToken[] memory) {\n        uint totalItemCount = _tokenIds.current();\n        uint itemCount = 0;\n\n        for (uint i = 1; i <= totalItemCount; i++) {\n            if (idToListedToken[i].owner == msg.sender) {\n                itemCount++;\n            }\n        }\n\n        ListedToken[] memory items = new ListedToken[](itemCount);\n        uint currentIndex = 0;\n    \n        for (uint i = 1; i <= totalItemCount; i++) {\n            if (idToListedToken[i].owner == msg.sender) {\n                items[currentIndex] = idToListedToken[i];\n                currentIndex++;\n            }\n        }\n\n        return items;\n    }\n\n    function getNFTsByCollection(Collection collection) public view returns (ListedToken[] memory) {\n        uint nftCount = _tokenIds.current();\n        uint listedCount = 0;\n\n        for (uint i = 1; i <= nftCount; i++) {\n            if (idToListedToken[i].collection == collection && idToListedToken[i].currentlyListed == true) {\n                listedCount++;\n            }\n        }\n\n        ListedToken[] memory tokens = new ListedToken[](listedCount);\n        uint currentIndex = 0;\n\n        for (uint i = 1; i <= nftCount; i++) {\n            if (idToListedToken[i].collection == collection && idToListedToken[i].currentlyListed == true) {\n                tokens[currentIndex] = idToListedToken[i];\n                currentIndex++;\n            }\n        }\n\n        return tokens;\n    }\n\n    function getTokenHistory(uint256 tokenId) public view returns (TokenHistory[] memory) {\n        return idToTokenHistory[tokenId];\n    }\n\n    function executeSale(uint256 tokenId) public payable {\n        require(idToListedToken[tokenId].currentlyListed, \"Token not currently listed\");\n        require(msg.value >= idToListedToken[tokenId].price, \"Insufficient funds sent\");\n\n        address payable seller = idToListedToken[tokenId].owner;\n        uint256 price = idToListedToken[tokenId].price;\n        uint256 commission = price * 5 / 100;\n        uint256 sellerAmount = price - commission;\n\n        idToListedToken[tokenId].currentlyListed = false;\n        idToListedToken[tokenId].seller = seller;\n        _itemsSold.increment();\n\n        _transfer(seller, msg.sender, tokenId);\n        payable(owner).transfer(listPrice);\n        seller.transfer(sellerAmount);\n        payable(owner).transfer(commission);\n\n        emit TokenSaleSuccess(\n            tokenId,\n            msg.sender,\n            seller,\n            price\n        );\n\n        updateTokenHistory(tokenId, msg.sender, price);\n    }\n\n    function resellToken(uint256 tokenId, uint256 price) public payable {\n        require(idToListedToken[tokenId].owner == msg.sender, \"Only item owner can perform this operation\");\n        require(idToListedToken[tokenId].currentlyListed == false,\"Nft is already listed\");\n        require(msg.value == listPrice, \"Price must be equal to listing price\");\n\n        idToListedToken[tokenId].currentlyListed = true;\n        idToListedToken[tokenId].price = price;\n        idToListedToken[tokenId].seller = payable(msg.sender);\n\n        emit TokenListedSuccess(\n            tokenId,\n            msg.sender,\n            address(this),\n            price,\n            true,\n            idToListedToken[tokenId].collection  \n        );\n\n    }\n\n    function unSellToken(uint256 tokenId) public payable {\n        require(idToListedToken[tokenId].owner == msg.sender, \"Only item owner can perform this operation\");\n        require(idToListedToken[tokenId].currentlyListed == true,\"Nft is already unlisted\");\n\n        idToListedToken[tokenId].currentlyListed = false;\n\n        emit TokenListedSuccess(\n            tokenId,\n            idToListedToken[tokenId].owner,\n            idToListedToken[tokenId].seller,\n            idToListedToken[tokenId].price,\n            false,\n            idToListedToken[tokenId].collection  \n        );\n\n    }\n\n        function transferFrom(address from, address to, uint256 tokenId) public override {\n        super.transferFrom(from, to, tokenId);\n        idToListedToken[tokenId].owner = payable(to);\n    }\n\n    function safeTransferFrom(address from, address to, uint256 tokenId) public override {\n        super.safeTransferFrom(from, to, tokenId);\n        idToListedToken[tokenId].owner = payable(to);\n    }\n\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public override {\n        super.safeTransferFrom(from, to, tokenId, _data);\n        idToListedToken[tokenId].owner = payable(to);\n    }\n\n    function _transfer(address from, address to, uint256 tokenId) internal override {\n\n        require(!idToListedToken[tokenId].currentlyListed, \"Token is currently listed\");\n        super._transfer(from, to, tokenId);\n\n        idToListedToken[tokenId].owner = payable(to);\n    }\n\n    function transferToken(address to, uint256 tokenId) public {    \n        require(idToListedToken[tokenId].owner == msg.sender, \"Only item owner can transfer\");\n        require(!idToListedToken[tokenId].currentlyListed, \"Token is currently listed\");\n        require(msg.sender != to, \"Only can transfered to others wallet\");\n\n        _transfer(msg.sender, to, tokenId);\n    }\n\n    function updateTokenHistory(uint256 tokenId, address newOwner, uint256 price) private {\n        TokenHistory[] storage history = idToTokenHistory[tokenId];\n        if (history.length == 3) {\n            for (uint i = 0; i < 2; i++) {\n                history[i] = history[i + 1];\n            }\n            history.pop();\n        }\n        history.push(TokenHistory({\n            owner: newOwner,\n            price: price,\n            timestamp: block.timestamp\n        }));\n    }\n\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/extensions/ERC721URIStorage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC721.sol\";\nimport \"../../../interfaces/IERC4906.sol\";\n\n/**\n * @dev ERC721 token with storage based token URI management.\n */\nabstract contract ERC721URIStorage is IERC4906, ERC721 {\n    using Strings for uint256;\n\n    // Optional mapping for token URIs\n    mapping(uint256 => string) private _tokenURIs;\n\n    /**\n     * @dev See {IERC165-supportsInterface}\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, IERC165) returns (bool) {\n        return interfaceId == bytes4(0x49064906) || super.supportsInterface(interfaceId);\n    }\n\n    /**\n     * @dev See {IERC721Metadata-tokenURI}.\n     */\n    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n        _requireMinted(tokenId);\n\n        string memory _tokenURI = _tokenURIs[tokenId];\n        string memory base = _baseURI();\n\n        // If there is no base URI, return the token URI.\n        if (bytes(base).length == 0) {\n            return _tokenURI;\n        }\n        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n        if (bytes(_tokenURI).length > 0) {\n            return string(abi.encodePacked(base, _tokenURI));\n        }\n\n        return super.tokenURI(tokenId);\n    }\n\n    /**\n     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n     *\n     * Emits {MetadataUpdate}.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n        require(_exists(tokenId), \"ERC721URIStorage: URI set of nonexistent token\");\n        _tokenURIs[tokenId] = _tokenURI;\n\n        emit MetadataUpdate(tokenId);\n    }\n\n    /**\n     * @dev See {ERC721-_burn}. This override additionally checks to see if a\n     * token-specific URI was set for the token, and if so, it deletes the token URI from\n     * the storage mapping.\n     */\n    function _burn(uint256 tokenId) internal virtual override {\n        super._burn(tokenId);\n\n        if (bytes(_tokenURIs[tokenId]).length != 0) {\n            delete _tokenURIs[tokenId];\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Counters.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @title Counters\n * @author Matt Condon (@shrugs)\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\n *\n * Include with `using Counters for Counters.Counter;`\n */\nlibrary Counters {\n    struct Counter {\n        // This variable should never be directly accessed by users of the library: interactions must be restricted to\n        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\n        // this feature: see https://github.com/ethereum/solidity/issues/4637\n        uint256 _value; // default: 0\n    }\n\n    function current(Counter storage counter) internal view returns (uint256) {\n        return counter._value;\n    }\n\n    function increment(Counter storage counter) internal {\n        unchecked {\n            counter._value += 1;\n        }\n    }\n\n    function decrement(Counter storage counter) internal {\n        uint256 value = counter._value;\n        require(value > 0, \"Counter: decrement overflow\");\n        unchecked {\n            counter._value = value - 1;\n        }\n    }\n\n    function reset(Counter storage counter) internal {\n        counter._value = 0;\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/ERC721.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/ERC721.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC721.sol\";\nimport \"./IERC721Receiver.sol\";\nimport \"./extensions/IERC721Metadata.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../utils/Strings.sol\";\nimport \"../../utils/introspection/ERC165.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721 is Context, ERC165, IERC721, IERC721Metadata {\n    using Address for address;\n    using Strings for uint256;\n\n    // Token name\n    string private _name;\n\n    // Token symbol\n    string private _symbol;\n\n    // Mapping from token ID to owner address\n    mapping(uint256 => address) private _owners;\n\n    // Mapping owner address to token count\n    mapping(address => uint256) private _balances;\n\n    // Mapping from token ID to approved address\n    mapping(uint256 => address) private _tokenApprovals;\n\n    // Mapping from owner to operator approvals\n    mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n    /**\n     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n        return\n            interfaceId == type(IERC721).interfaceId ||\n            interfaceId == type(IERC721Metadata).interfaceId ||\n            super.supportsInterface(interfaceId);\n    }\n\n    /**\n     * @dev See {IERC721-balanceOf}.\n     */\n    function balanceOf(address owner) public view virtual override returns (uint256) {\n        require(owner != address(0), \"ERC721: address zero is not a valid owner\");\n        return _balances[owner];\n    }\n\n    /**\n     * @dev See {IERC721-ownerOf}.\n     */\n    function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n        address owner = _ownerOf(tokenId);\n        require(owner != address(0), \"ERC721: invalid token ID\");\n        return owner;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-name}.\n     */\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-symbol}.\n     */\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-tokenURI}.\n     */\n    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n        _requireMinted(tokenId);\n\n        string memory baseURI = _baseURI();\n        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : \"\";\n    }\n\n    /**\n     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n     * by default, can be overridden in child contracts.\n     */\n    function _baseURI() internal view virtual returns (string memory) {\n        return \"\";\n    }\n\n    /**\n     * @dev See {IERC721-approve}.\n     */\n    function approve(address to, uint256 tokenId) public virtual override {\n        address owner = ERC721.ownerOf(tokenId);\n        require(to != owner, \"ERC721: approval to current owner\");\n\n        require(\n            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n            \"ERC721: approve caller is not token owner or approved for all\"\n        );\n\n        _approve(to, tokenId);\n    }\n\n    /**\n     * @dev See {IERC721-getApproved}.\n     */\n    function getApproved(uint256 tokenId) public view virtual override returns (address) {\n        _requireMinted(tokenId);\n\n        return _tokenApprovals[tokenId];\n    }\n\n    /**\n     * @dev See {IERC721-setApprovalForAll}.\n     */\n    function setApprovalForAll(address operator, bool approved) public virtual override {\n        _setApprovalForAll(_msgSender(), operator, approved);\n    }\n\n    /**\n     * @dev See {IERC721-isApprovedForAll}.\n     */\n    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n        return _operatorApprovals[owner][operator];\n    }\n\n    /**\n     * @dev See {IERC721-transferFrom}.\n     */\n    function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n        //solhint-disable-next-line max-line-length\n        require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: caller is not token owner or approved\");\n\n        _transfer(from, to, tokenId);\n    }\n\n    /**\n     * @dev See {IERC721-safeTransferFrom}.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n        safeTransferFrom(from, to, tokenId, \"\");\n    }\n\n    /**\n     * @dev See {IERC721-safeTransferFrom}.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual override {\n        require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: caller is not token owner or approved\");\n        _safeTransfer(from, to, tokenId, data);\n    }\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n     * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n     *\n     * `data` is additional data, it has no specified format and it is sent in call to `to`.\n     *\n     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n     * implement alternative mechanisms to perform token transfer, such as signature-based.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {\n        _transfer(from, to, tokenId);\n        require(_checkOnERC721Received(from, to, tokenId, data), \"ERC721: transfer to non ERC721Receiver implementer\");\n    }\n\n    /**\n     * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist\n     */\n    function _ownerOf(uint256 tokenId) internal view virtual returns (address) {\n        return _owners[tokenId];\n    }\n\n    /**\n     * @dev Returns whether `tokenId` exists.\n     *\n     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n     *\n     * Tokens start existing when they are minted (`_mint`),\n     * and stop existing when they are burned (`_burn`).\n     */\n    function _exists(uint256 tokenId) internal view virtual returns (bool) {\n        return _ownerOf(tokenId) != address(0);\n    }\n\n    /**\n     * @dev Returns whether `spender` is allowed to manage `tokenId`.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n        address owner = ERC721.ownerOf(tokenId);\n        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);\n    }\n\n    /**\n     * @dev Safely mints `tokenId` and transfers it to `to`.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must not exist.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _safeMint(address to, uint256 tokenId) internal virtual {\n        _safeMint(to, tokenId, \"\");\n    }\n\n    /**\n     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n     */\n    function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {\n        _mint(to, tokenId);\n        require(\n            _checkOnERC721Received(address(0), to, tokenId, data),\n            \"ERC721: transfer to non ERC721Receiver implementer\"\n        );\n    }\n\n    /**\n     * @dev Mints `tokenId` and transfers it to `to`.\n     *\n     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n     *\n     * Requirements:\n     *\n     * - `tokenId` must not exist.\n     * - `to` cannot be the zero address.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _mint(address to, uint256 tokenId) internal virtual {\n        require(to != address(0), \"ERC721: mint to the zero address\");\n        require(!_exists(tokenId), \"ERC721: token already minted\");\n\n        _beforeTokenTransfer(address(0), to, tokenId, 1);\n\n        // Check that tokenId was not minted by `_beforeTokenTransfer` hook\n        require(!_exists(tokenId), \"ERC721: token already minted\");\n\n        unchecked {\n            // Will not overflow unless all 2**256 token ids are minted to the same owner.\n            // Given that tokens are minted one by one, it is impossible in practice that\n            // this ever happens. Might change if we allow batch minting.\n            // The ERC fails to describe this case.\n            _balances[to] += 1;\n        }\n\n        _owners[tokenId] = to;\n\n        emit Transfer(address(0), to, tokenId);\n\n        _afterTokenTransfer(address(0), to, tokenId, 1);\n    }\n\n    /**\n     * @dev Destroys `tokenId`.\n     * The approval is cleared when the token is burned.\n     * This is an internal function that does not check if the sender is authorized to operate on the token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _burn(uint256 tokenId) internal virtual {\n        address owner = ERC721.ownerOf(tokenId);\n\n        _beforeTokenTransfer(owner, address(0), tokenId, 1);\n\n        // Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook\n        owner = ERC721.ownerOf(tokenId);\n\n        // Clear approvals\n        delete _tokenApprovals[tokenId];\n\n        unchecked {\n            // Cannot overflow, as that would require more tokens to be burned/transferred\n            // out than the owner initially received through minting and transferring in.\n            _balances[owner] -= 1;\n        }\n        delete _owners[tokenId];\n\n        emit Transfer(owner, address(0), tokenId);\n\n        _afterTokenTransfer(owner, address(0), tokenId, 1);\n    }\n\n    /**\n     * @dev Transfers `tokenId` from `from` to `to`.\n     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must be owned by `from`.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _transfer(address from, address to, uint256 tokenId) internal virtual {\n        require(ERC721.ownerOf(tokenId) == from, \"ERC721: transfer from incorrect owner\");\n        require(to != address(0), \"ERC721: transfer to the zero address\");\n\n        _beforeTokenTransfer(from, to, tokenId, 1);\n\n        // Check that tokenId was not transferred by `_beforeTokenTransfer` hook\n        require(ERC721.ownerOf(tokenId) == from, \"ERC721: transfer from incorrect owner\");\n\n        // Clear approvals from the previous owner\n        delete _tokenApprovals[tokenId];\n\n        unchecked {\n            // `_balances[from]` cannot overflow for the same reason as described in `_burn`:\n            // `from`'s balance is the number of token held, which is at least one before the current\n            // transfer.\n            // `_balances[to]` could overflow in the conditions described in `_mint`. That would require\n            // all 2**256 token ids to be minted, which in practice is impossible.\n            _balances[from] -= 1;\n            _balances[to] += 1;\n        }\n        _owners[tokenId] = to;\n\n        emit Transfer(from, to, tokenId);\n\n        _afterTokenTransfer(from, to, tokenId, 1);\n    }\n\n    /**\n     * @dev Approve `to` to operate on `tokenId`\n     *\n     * Emits an {Approval} event.\n     */\n    function _approve(address to, uint256 tokenId) internal virtual {\n        _tokenApprovals[tokenId] = to;\n        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);\n    }\n\n    /**\n     * @dev Approve `operator` to operate on all of `owner` tokens\n     *\n     * Emits an {ApprovalForAll} event.\n     */\n    function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {\n        require(owner != operator, \"ERC721: approve to caller\");\n        _operatorApprovals[owner][operator] = approved;\n        emit ApprovalForAll(owner, operator, approved);\n    }\n\n    /**\n     * @dev Reverts if the `tokenId` has not been minted yet.\n     */\n    function _requireMinted(uint256 tokenId) internal view virtual {\n        require(_exists(tokenId), \"ERC721: invalid token ID\");\n    }\n\n    /**\n     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n     * The call is not executed if the target address is not a contract.\n     *\n     * @param from address representing the previous owner of the given token ID\n     * @param to target address that will receive the tokens\n     * @param tokenId uint256 ID of the token to be transferred\n     * @param data bytes optional data to send along with the call\n     * @return bool whether the call correctly returned the expected magic value\n     */\n    function _checkOnERC721Received(\n        address from,\n        address to,\n        uint256 tokenId,\n        bytes memory data\n    ) private returns (bool) {\n        if (to.isContract()) {\n            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {\n                return retval == IERC721Receiver.onERC721Received.selector;\n            } catch (bytes memory reason) {\n                if (reason.length == 0) {\n                    revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n                } else {\n                    /// @solidity memory-safe-assembly\n                    assembly {\n                        revert(add(32, reason), mload(reason))\n                    }\n                }\n            }\n        } else {\n            return true;\n        }\n    }\n\n    /**\n     * @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is\n     * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.\n     *\n     * Calling conditions:\n     *\n     * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`.\n     * - When `from` is zero, the tokens will be minted for `to`.\n     * - When `to` is zero, ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     * - `batchSize` is non-zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {}\n\n    /**\n     * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is\n     * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.\n     *\n     * Calling conditions:\n     *\n     * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`.\n     * - When `from` is zero, the tokens were minted for `to`.\n     * - When `to` is zero, ``from``'s tokens were burned.\n     * - `from` and `to` are never both zero.\n     * - `batchSize` is non-zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _afterTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {}\n\n    /**\n     * @dev Unsafe write access to the balances, used by extensions that \"mint\" tokens using an {ownerOf} override.\n     *\n     * WARNING: Anyone calling this MUST ensure that the balances remain consistent with the ownership. The invariant\n     * being that for any address `a` the value returned by `balanceOf(a)` must be equal to the number of tokens such\n     * that `ownerOf(tokenId)` is `a`.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function __unsafe_increaseBalance(address account, uint256 amount) internal {\n        _balances[account] += amount;\n    }\n}\n"
      },
      "@openzeppelin/contracts/interfaces/IERC4906.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC4906.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\nimport \"./IERC721.sol\";\n\n/// @title EIP-721 Metadata Update Extension\ninterface IERC4906 is IERC165, IERC721 {\n    /// @dev This event emits when the metadata of a token is changed.\n    /// So that the third-party platforms such as NFT market could\n    /// timely update the images and related attributes of the NFT.\n    event MetadataUpdate(uint256 _tokenId);\n\n    /// @dev This event emits when the metadata of a range of tokens is changed.\n    /// So that the third-party platforms such as NFT market could\n    /// timely update the images and related attributes of the NFTs.\n    event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721 is IERC165 {\n    /**\n     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n    /**\n     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n     */\n    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n    /**\n     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n     */\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n    /**\n     * @dev Returns the number of tokens in ``owner``'s account.\n     */\n    function balanceOf(address owner) external view returns (uint256 balance);\n\n    /**\n     * @dev Returns the owner of the `tokenId` token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function ownerOf(uint256 tokenId) external view returns (address owner);\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n     * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n    /**\n     * @dev Transfers `tokenId` token from `from` to `to`.\n     *\n     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\n     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n     * understand this adds an external call which potentially creates a reentrancy vulnerability.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must be owned by `from`.\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 tokenId) external;\n\n    /**\n     * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n     * The approval is cleared when the token is transferred.\n     *\n     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n     *\n     * Requirements:\n     *\n     * - The caller must own the token or be an approved operator.\n     * - `tokenId` must exist.\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address to, uint256 tokenId) external;\n\n    /**\n     * @dev Approve or remove `operator` as an operator for the caller.\n     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n     *\n     * Requirements:\n     *\n     * - The `operator` cannot be the caller.\n     *\n     * Emits an {ApprovalForAll} event.\n     */\n    function setApprovalForAll(address operator, bool approved) external;\n\n    /**\n     * @dev Returns the account approved for `tokenId` token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function getApproved(uint256 tokenId) external view returns (address operator);\n\n    /**\n     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n     *\n     * See {setApprovalForAll}\n     */\n    function isApprovedForAll(address owner, address operator) external view returns (bool);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n    /**\n     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n     * by `operator` from `from`, this function is called.\n     *\n     * It must return its Solidity selector to confirm the token transfer.\n     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n     *\n     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\n     */\n    function onERC721Received(\n        address operator,\n        address from,\n        uint256 tokenId,\n        bytes calldata data\n    ) external returns (bytes4);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Metadata is IERC721 {\n    /**\n     * @dev Returns the token collection name.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the token collection symbol.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n     */\n    function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n"
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     *\n     * Furthermore, `isContract` will also return true if the target contract within\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\n     * which only has an effect at the end of a transaction.\n     * ====\n     *\n     * [IMPORTANT]\n     * ====\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\n     *\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n     * constructor.\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize/address.code.length, which returns 0\n        // for contracts in construction, since the code is only stored at the end\n        // of the constructor execution.\n\n        return account.code.length > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n     *\n     * _Available since v4.8._\n     */\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        if (success) {\n            if (returndata.length == 0) {\n                // only check isContract if the call was successful and the return data is empty\n                // otherwise we already know that it was a contract\n                require(isContract(target), \"Address: call to non-contract\");\n            }\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    /**\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n     * revert reason or using the provided one.\n     *\n     * _Available since v4.3._\n     */\n    function verifyCallResult(\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal pure returns (bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            /// @solidity memory-safe-assembly\n            assembly {\n                let returndata_size := mload(returndata)\n                revert(add(32, returndata), returndata_size)\n            }\n        } else {\n            revert(errorMessage);\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\nimport \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n    bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n    uint8 private constant _ADDRESS_LENGTH = 20;\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n     */\n    function toString(uint256 value) internal pure returns (string memory) {\n        unchecked {\n            uint256 length = Math.log10(value) + 1;\n            string memory buffer = new string(length);\n            uint256 ptr;\n            /// @solidity memory-safe-assembly\n            assembly {\n                ptr := add(buffer, add(32, length))\n            }\n            while (true) {\n                ptr--;\n                /// @solidity memory-safe-assembly\n                assembly {\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n                }\n                value /= 10;\n                if (value == 0) break;\n            }\n            return buffer;\n        }\n    }\n\n    /**\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\n     */\n    function toString(int256 value) internal pure returns (string memory) {\n        return string(abi.encodePacked(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value))));\n    }\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n     */\n    function toHexString(uint256 value) internal pure returns (string memory) {\n        unchecked {\n            return toHexString(value, Math.log256(value) + 1);\n        }\n    }\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n     */\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n        bytes memory buffer = new bytes(2 * length + 2);\n        buffer[0] = \"0\";\n        buffer[1] = \"x\";\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\n            buffer[i] = _SYMBOLS[value & 0xf];\n            value >>= 4;\n        }\n        require(value == 0, \"Strings: hex length insufficient\");\n        return string(buffer);\n    }\n\n    /**\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n     */\n    function toHexString(address addr) internal pure returns (string memory) {\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n    }\n\n    /**\n     * @dev Returns true if the two strings are equal.\n     */\n    function equal(string memory a, string memory b) internal pure returns (bool) {\n        return keccak256(bytes(a)) == keccak256(bytes(b));\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/introspection/ERC165.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n        return interfaceId == type(IERC165).interfaceId;\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n    /**\n     * @dev Returns true if this contract implements the interface defined by\n     * `interfaceId`. See the corresponding\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n     * to learn more about how these ids are created.\n     *\n     * This function call must use less than 30 000 gas.\n     */\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n    enum Rounding {\n        Down, // Toward negative infinity\n        Up, // Toward infinity\n        Zero // Toward zero\n    }\n\n    /**\n     * @dev Returns the largest of two numbers.\n     */\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a > b ? a : b;\n    }\n\n    /**\n     * @dev Returns the smallest of two numbers.\n     */\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a < b ? a : b;\n    }\n\n    /**\n     * @dev Returns the average of two numbers. The result is rounded towards\n     * zero.\n     */\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b) / 2 can overflow.\n        return (a & b) + (a ^ b) / 2;\n    }\n\n    /**\n     * @dev Returns the ceiling of the division of two numbers.\n     *\n     * This differs from standard division with `/` in that it rounds up instead\n     * of rounding down.\n     */\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b - 1) / b can overflow on addition, so we distribute.\n        return a == 0 ? 0 : (a - 1) / b + 1;\n    }\n\n    /**\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n     * with further edits by Uniswap Labs also under MIT license.\n     */\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n        unchecked {\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n            // variables such that product = prod1 * 2^256 + prod0.\n            uint256 prod0; // Least significant 256 bits of the product\n            uint256 prod1; // Most significant 256 bits of the product\n            assembly {\n                let mm := mulmod(x, y, not(0))\n                prod0 := mul(x, y)\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n            }\n\n            // Handle non-overflow cases, 256 by 256 division.\n            if (prod1 == 0) {\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n                // The surrounding unchecked block does not change this fact.\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n                return prod0 / denominator;\n            }\n\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\n            require(denominator > prod1, \"Math: mulDiv overflow\");\n\n            ///////////////////////////////////////////////\n            // 512 by 256 division.\n            ///////////////////////////////////////////////\n\n            // Make division exact by subtracting the remainder from [prod1 prod0].\n            uint256 remainder;\n            assembly {\n                // Compute remainder using mulmod.\n                remainder := mulmod(x, y, denominator)\n\n                // Subtract 256 bit number from 512 bit number.\n                prod1 := sub(prod1, gt(remainder, prod0))\n                prod0 := sub(prod0, remainder)\n            }\n\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n            // See https://cs.stackexchange.com/q/138556/92363.\n\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\n            uint256 twos = denominator & (~denominator + 1);\n            assembly {\n                // Divide denominator by twos.\n                denominator := div(denominator, twos)\n\n                // Divide [prod1 prod0] by twos.\n                prod0 := div(prod0, twos)\n\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n                twos := add(div(sub(0, twos), twos), 1)\n            }\n\n            // Shift in bits from prod1 into prod0.\n            prod0 |= prod1 * twos;\n\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n            // four bits. That is, denominator * inv = 1 mod 2^4.\n            uint256 inverse = (3 * denominator) ^ 2;\n\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n            // in modular arithmetic, doubling the correct bits in each step.\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n            // is no longer required.\n            result = prod0 * inverse;\n            return result;\n        }\n    }\n\n    /**\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n     */\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n        uint256 result = mulDiv(x, y, denominator);\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n            result += 1;\n        }\n        return result;\n    }\n\n    /**\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n     *\n     * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n     */\n    function sqrt(uint256 a) internal pure returns (uint256) {\n        if (a == 0) {\n            return 0;\n        }\n\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n        //\n        // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n        //\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n        //\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n        uint256 result = 1 << (log2(a) >> 1);\n\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n        // into the expected uint128 result.\n        unchecked {\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            return min(result, a / result);\n        }\n    }\n\n    /**\n     * @notice Calculates sqrt(a), following the selected rounding direction.\n     */\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = sqrt(a);\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 2, rounded down, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log2(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >> 128 > 0) {\n                value >>= 128;\n                result += 128;\n            }\n            if (value >> 64 > 0) {\n                value >>= 64;\n                result += 64;\n            }\n            if (value >> 32 > 0) {\n                value >>= 32;\n                result += 32;\n            }\n            if (value >> 16 > 0) {\n                value >>= 16;\n                result += 16;\n            }\n            if (value >> 8 > 0) {\n                value >>= 8;\n                result += 8;\n            }\n            if (value >> 4 > 0) {\n                value >>= 4;\n                result += 4;\n            }\n            if (value >> 2 > 0) {\n                value >>= 2;\n                result += 2;\n            }\n            if (value >> 1 > 0) {\n                result += 1;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log2(value);\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 10, rounded down, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log10(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >= 10 ** 64) {\n                value /= 10 ** 64;\n                result += 64;\n            }\n            if (value >= 10 ** 32) {\n                value /= 10 ** 32;\n                result += 32;\n            }\n            if (value >= 10 ** 16) {\n                value /= 10 ** 16;\n                result += 16;\n            }\n            if (value >= 10 ** 8) {\n                value /= 10 ** 8;\n                result += 8;\n            }\n            if (value >= 10 ** 4) {\n                value /= 10 ** 4;\n                result += 4;\n            }\n            if (value >= 10 ** 2) {\n                value /= 10 ** 2;\n                result += 2;\n            }\n            if (value >= 10 ** 1) {\n                result += 1;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log10(value);\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 256, rounded down, of a positive value.\n     * Returns 0 if given 0.\n     *\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n     */\n    function log256(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >> 128 > 0) {\n                value >>= 128;\n                result += 16;\n            }\n            if (value >> 64 > 0) {\n                value >>= 64;\n                result += 8;\n            }\n            if (value >> 32 > 0) {\n                value >>= 32;\n                result += 4;\n            }\n            if (value >> 16 > 0) {\n                value >>= 16;\n                result += 2;\n            }\n            if (value >> 8 > 0) {\n                result += 1;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log256(value);\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/math/SignedMath.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n    /**\n     * @dev Returns the largest of two signed numbers.\n     */\n    function max(int256 a, int256 b) internal pure returns (int256) {\n        return a > b ? a : b;\n    }\n\n    /**\n     * @dev Returns the smallest of two signed numbers.\n     */\n    function min(int256 a, int256 b) internal pure returns (int256) {\n        return a < b ? a : b;\n    }\n\n    /**\n     * @dev Returns the average of two signed numbers without overflow.\n     * The result is rounded towards zero.\n     */\n    function average(int256 a, int256 b) internal pure returns (int256) {\n        // Formula from the book \"Hacker's Delight\"\n        int256 x = (a & b) + ((a ^ b) >> 1);\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\n    }\n\n    /**\n     * @dev Returns the absolute unsigned value of a signed value.\n     */\n    function abs(int256 n) internal pure returns (uint256) {\n        unchecked {\n            // must be unchecked in order to support `n = type(int256).min`\n            return uint256(n >= 0 ? n : -n);\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/interfaces/IERC165.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/introspection/IERC165.sol\";\n"
      },
      "@openzeppelin/contracts/interfaces/IERC721.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC721.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../token/ERC721/IERC721.sol\";\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "@openzeppelin/contracts/interfaces/IERC4906.sol": {
        "IERC4906": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fromTokenId",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_toTokenId",
                  "type": "uint256"
                }
              ],
              "name": "BatchMetadataUpdate",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_tokenId",
                  "type": "uint256"
                }
              ],
              "name": "MetadataUpdate",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"}],\"name\":\"BatchMetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"MetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"BatchMetadataUpdate(uint256,uint256)\":{\"details\":\"This event emits when the metadata of a range of tokens is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFTs.\"},\"MetadataUpdate(uint256)\":{\"details\":\"This event emits when the metadata of a token is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFT.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"title\":\"EIP-721 Metadata Update Extension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4906.sol\":\"IERC4906\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xd04b0f06e0666f29cf7cccc82894de541e19bb30a765b107b1e40bb7fe5f7d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b652499d098e88d8d878374616bb58434301061cae2253298b3f374044e0ddb\",\"dweb:/ipfs/QmbhAzctqo5jrSKU6idHdVyqfmzCcDbNUPvmx4GiXxfA6q\"]},\"@openzeppelin/contracts/interfaces/IERC4906.sol\":{\"keccak256\":\"0x2a9dadb806be80dd451821f1f1190eb9aa6f6edae85b185db29d60767cc0c5f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c25cac8dbe5bd96320053d23c3dacdb875e629d7c53ac00892eb7aa8500bde6\",\"dweb:/ipfs/Qmaf2oqbxxdJA9DphAoH4UCb8aXEAVM8fnu6qMxHJ5ta4A\"]},\"@openzeppelin/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xaf297d12d8d4a57fe01a70f0ef38908f208e3faedc577056d0b728fa2f3ccf0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fbfaf37123958822a2720a4ea29651be00edab787540b770f73d3e025d286ff8\",\"dweb:/ipfs/QmbzgWeTm8hJVUqWrNAwFjshqbYVyeGpQA8D1huzxQdmw6\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/ERC721.sol": {
        "ERC721": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name_",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol_",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:2039:17",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:17",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "78:845:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "127:24:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "136:5:17"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "143:5:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "129:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "129:20:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "129:20:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "106:6:17"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "114:4:17",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "102:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "102:17:17"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "121:3:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "98:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "98:27:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "91:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "91:35:17"
                              },
                              "nodeType": "YulIf",
                              "src": "88:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "160:23:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "176:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "170:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "170:13:17"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "164:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "192:28:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "210:2:17",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "214:1:17",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "206:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "206:10:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "218:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "202:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "202:18:17"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "196:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "243:22:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "245:16:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "245:18:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "245:18:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "235:2:17"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "239:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "232:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "232:10:17"
                              },
                              "nodeType": "YulIf",
                              "src": "229:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "274:17:17",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "288:2:17",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "284:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "284:7:17"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "278:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "300:23:17",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "320:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "314:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "314:9:17"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "304:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "332:71:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "354:6:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "378:2:17"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "382:4:17",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "374:3:17"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "374:13:17"
                                              },
                                              {
                                                "name": "_3",
                                                "nodeType": "YulIdentifier",
                                                "src": "389:2:17"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "370:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "370:22:17"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "394:2:17",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "366:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "366:31:17"
                                      },
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "399:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "362:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "362:40:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "350:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "350:53:17"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "336:10:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "462:22:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "464:16:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "464:18:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "464:18:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "421:10:17"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "433:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "418:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "418:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "441:10:17"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "453:6:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "438:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "438:22:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "415:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "415:46:17"
                              },
                              "nodeType": "YulIf",
                              "src": "412:2:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "500:2:17",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "504:10:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "493:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "493:22:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "493:22:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "531:6:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "539:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "524:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "524:18:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "524:18:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "551:14:17",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "561:4:17",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "555:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "611:24:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "620:5:17"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "627:5:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "613:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "613:20:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "613:20:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "588:6:17"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "596:2:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "584:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "584:15:17"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "601:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "580:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "580:24:17"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "606:3:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "577:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "577:33:17"
                              },
                              "nodeType": "YulIf",
                              "src": "574:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "644:14:17",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "653:5:17"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "648:1:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "713:87:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "memPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "742:6:17"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "750:1:17"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "738:3:17"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "738:14:17"
                                            },
                                            {
                                              "name": "_4",
                                              "nodeType": "YulIdentifier",
                                              "src": "754:2:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "734:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "734:23:17"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "offset",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "773:6:17"
                                                    },
                                                    {
                                                      "name": "i",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "781:1:17"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "769:3:17"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "769:14:17"
                                                },
                                                {
                                                  "name": "_4",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "785:2:17"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "765:3:17"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "765:23:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "759:5:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "759:30:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "727:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "727:63:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "727:63:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "678:1:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "681:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "675:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "675:9:17"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "685:19:17",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "687:15:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "696:1:17"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "699:2:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "692:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "692:10:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "687:1:17"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "671:3:17",
                                "statements": []
                              },
                              "src": "667:133:17"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "830:63:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "memPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "859:6:17"
                                                },
                                                {
                                                  "name": "_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "867:2:17"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "855:3:17"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "855:15:17"
                                            },
                                            {
                                              "name": "_4",
                                              "nodeType": "YulIdentifier",
                                              "src": "872:2:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "851:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "851:24:17"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "877:5:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "844:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "844:39:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "844:39:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "815:1:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "818:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "812:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "812:9:17"
                              },
                              "nodeType": "YulIf",
                              "src": "809:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "902:15:17",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "911:6:17"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "902:5:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_string_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "52:6:17",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "60:3:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "68:5:17",
                            "type": ""
                          }
                        ],
                        "src": "14:909:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1046:474:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1092:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1101:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1109:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1094:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1094:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1094:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1067:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1076:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1063:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1063:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1088:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1059:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1059:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1056:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1127:30:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1147:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1141:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1141:16:17"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1131:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1166:28:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1184:2:17",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1188:1:17",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1180:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1180:10:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1192:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1176:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1176:18:17"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1170:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1221:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1230:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1238:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1223:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1223:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1223:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1209:6:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1217:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1206:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1206:14:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1203:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1256:71:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1299:9:17"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1310:6:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1295:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1295:22:17"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1319:7:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1266:28:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1266:61:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1256:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1336:41:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1362:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1373:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1358:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1358:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1352:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1352:25:17"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1340:8:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1406:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1415:6:17"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1423:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1408:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1408:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1408:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1392:8:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1402:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1389:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1389:16:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1386:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1441:73:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1484:9:17"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1495:8:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1480:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1480:24:17"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1506:7:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1451:28:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1451:63:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1441:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1004:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1015:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1027:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1035:6:17",
                            "type": ""
                          }
                        ],
                        "src": "928:592:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1580:325:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1590:22:17",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1604:1:17",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "1607:4:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "1600:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1600:12:17"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "1590:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1621:38:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "1651:4:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1657:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "1647:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1647:12:17"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "1625:18:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1698:31:17",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1700:27:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "1714:6:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1722:4:17",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "1710:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1710:17:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "1700:6:17"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "1678:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1671:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1671:26:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1668:2:17"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1788:111:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1809:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1816:3:17",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1821:10:17",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "1812:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1812:20:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1802:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1802:31:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1802:31:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1853:1:17",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1856:4:17",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1846:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1846:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1846:15:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1881:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1884:4:17",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1874:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1874:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1874:15:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "1744:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "1767:6:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1775:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1764:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1764:14:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "1741:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1741:38:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1738:2:17"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "1560:4:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "1569:6:17",
                            "type": ""
                          }
                        ],
                        "src": "1525:380:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1942:95:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1959:1:17",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1966:3:17",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1971:10:17",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1962:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1962:20:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1952:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1952:31:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1952:31:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1999:1:17",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2002:4:17",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1992:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1992:15:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1992:15:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2023:1:17",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2026:4:17",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "2016:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2016:15:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2016:15:17"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "1910:127:17"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(array, array) }\n        let i := array\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), array)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(value0, value0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(value1, value1) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n}",
                  "id": 17,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040523480156200001157600080fd5b506040516200139d3803806200139d8339810160408190526200003491620001c1565b81516200004990600090602085019062000068565b5080516200005f90600190602084019062000068565b5050506200027b565b828054620000769062000228565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b600082601f8301126200011f578081fd5b81516001600160401b03808211156200013c576200013c62000265565b604051601f8301601f19908116603f0116810190828211818310171562000167576200016762000265565b8160405283815260209250868385880101111562000183578485fd5b8491505b83821015620001a6578582018301518183018401529082019062000187565b83821115620001b757848385830101525b9695505050505050565b60008060408385031215620001d4578182fd5b82516001600160401b0380821115620001eb578384fd5b620001f9868387016200010e565b935060208501519150808211156200020f578283fd5b506200021e858286016200010e565b9150509250929050565b600181811c908216806200023d57607f821691505b602082108114156200025f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611112806200028b6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101b3578063b88d4fde146101c6578063c87b56dd146101d9578063e985e9c5146101ec57600080fd5b80636352211e1461017757806370a082311461018a57806395d89b41146101ab57600080fd5b806301ffc9a7146100d457806306fdde03146100fc578063081812fc14610111578063095ea7b31461013c57806323b872dd1461015157806342842e0e14610164575b600080fd5b6100e76100e2366004610e6a565b610228565b60405190151581526020015b60405180910390f35b61010461027a565b6040516100f39190610f52565b61012461011f366004610ea2565b61030c565b6040516001600160a01b0390911681526020016100f3565b61014f61014a366004610e41565b610333565b005b61014f61015f366004610cf7565b61044e565b61014f610172366004610cf7565b61047f565b610124610185366004610ea2565b61049a565b61019d610198366004610cab565b6104fa565b6040519081526020016100f3565b610104610580565b61014f6101c1366004610e07565b61058f565b61014f6101d4366004610d32565b61059e565b6101046101e7366004610ea2565b6105d6565b6100e76101fa366004610cc5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061025957506001600160e01b03198216635b5e139f60e01b145b8061027457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461028990611075565b80601f01602080910402602001604051908101604052809291908181526020018280546102b590611075565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b5050505050905090565b60006103178261064a565b506000908152600460205260409020546001600160a01b031690565b600061033e8261049a565b9050806001600160a01b0316836001600160a01b031614156103b15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103cd57506103cd81336101fa565b61043f5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016103a8565b61044983836106ac565b505050565b610458338261071a565b6104745760405162461bcd60e51b81526004016103a890610f65565b610449838383610799565b6104498383836040518060200160405280600081525061059e565b6000818152600260205260408120546001600160a01b0316806102745760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103a8565b60006001600160a01b0382166105645760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103a8565b506001600160a01b031660009081526003602052604090205490565b60606001805461028990611075565b61059a3383836108fd565b5050565b6105a8338361071a565b6105c45760405162461bcd60e51b81526004016103a890610f65565b6105d0848484846109cc565b50505050565b60606105e18261064a565b60006105f860408051602081019091526000815290565b905060008151116106185760405180602001604052806000815250610643565b80610622846109ff565b604051602001610633929190610ee6565b6040516020818303038152906040525b9392505050565b6000818152600260205260409020546001600160a01b03166106a95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103a8565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906106e18261049a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806107268361049a565b9050806001600160a01b0316846001600160a01b0316148061076d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806107915750836001600160a01b03166107868461030c565b6001600160a01b0316145b949350505050565b826001600160a01b03166107ac8261049a565b6001600160a01b0316146107d25760405162461bcd60e51b81526004016103a890611004565b6001600160a01b0382166108345760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103a8565b826001600160a01b03166108478261049a565b6001600160a01b03161461086d5760405162461bcd60e51b81526004016103a890611004565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b0316141561095f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103a8565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6109d7848484610799565b6109e384848484610aaa565b6105d05760405162461bcd60e51b81526004016103a890610fb2565b60606000610a0c83610bb7565b600101905060008167ffffffffffffffff811115610a3a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610a64576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610a9d57610aa2565b610a6e565b509392505050565b60006001600160a01b0384163b15610bac57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610aee903390899088908890600401610f15565b602060405180830381600087803b158015610b0857600080fd5b505af1925050508015610b38575060408051601f3d908101601f19168201909252610b3591810190610e86565b60015b610b92573d808015610b66576040519150601f19603f3d011682016040523d82523d6000602084013e610b6b565b606091505b508051610b8a5760405162461bcd60e51b81526004016103a890610fb2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610791565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610bf65772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610c22576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610c4057662386f26fc10000830492506010015b6305f5e1008310610c58576305f5e100830492506008015b6127108310610c6c57612710830492506004015b60648310610c7e576064830492506002015b600a83106102745760010192915050565b80356001600160a01b0381168114610ca657600080fd5b919050565b600060208284031215610cbc578081fd5b61064382610c8f565b60008060408385031215610cd7578081fd5b610ce083610c8f565b9150610cee60208401610c8f565b90509250929050565b600080600060608486031215610d0b578081fd5b610d1484610c8f565b9250610d2260208501610c8f565b9150604084013590509250925092565b60008060008060808587031215610d47578081fd5b610d5085610c8f565b9350610d5e60208601610c8f565b925060408501359150606085013567ffffffffffffffff80821115610d81578283fd5b818701915087601f830112610d94578283fd5b813581811115610da657610da66110b0565b604051601f8201601f19908116603f01168101908382118183101715610dce57610dce6110b0565b816040528281528a6020848701011115610de6578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215610e19578182fd5b610e2283610c8f565b915060208301358015158114610e36578182fd5b809150509250929050565b60008060408385031215610e53578182fd5b610e5c83610c8f565b946020939093013593505050565b600060208284031215610e7b578081fd5b8135610643816110c6565b600060208284031215610e97578081fd5b8151610643816110c6565b600060208284031215610eb3578081fd5b5035919050565b60008151808452610ed2816020860160208601611049565b601f01601f19169290920160200192915050565b60008351610ef8818460208801611049565b835190830190610f0c818360208801611049565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610f4890830184610eba565b9695505050505050565b6020815260006106436020830184610eba565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60005b8381101561106457818101518382015260200161104c565b838111156105d05750506000910152565b600181811c9082168061108957607f821691505b602082108114156110aa57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146106a957600080fdfea2646970667358221220e50af7866215ff14f1a1726b144689628c3df012f0020258ab84681c73d0ee0464736f6c63430008040033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x139D CODESIZE SUB DUP1 PUSH3 0x139D DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x1C1 JUMP JUMPDEST DUP2 MLOAD PUSH3 0x49 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x68 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x5F SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x68 JUMP JUMPDEST POP POP POP PUSH3 0x27B JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x76 SWAP1 PUSH3 0x228 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x9A JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0xE5 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xB5 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xE5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xE5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xE5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xC8 JUMP JUMPDEST POP PUSH3 0xF3 SWAP3 SWAP2 POP PUSH3 0xF7 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0xF3 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0xF8 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x11F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x13C JUMPI PUSH3 0x13C PUSH3 0x265 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x167 JUMPI PUSH3 0x167 PUSH3 0x265 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x183 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x1A6 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x187 JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x1B7 JUMPI DUP5 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x1D4 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1EB JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH3 0x1F9 DUP7 DUP4 DUP8 ADD PUSH3 0x10E JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x20F JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH3 0x21E DUP6 DUP3 DUP7 ADD PUSH3 0x10E JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x23D JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x25F 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 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1112 DUP1 PUSH3 0x28B PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6352211E GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x1D9 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x1EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6352211E EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x111 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x164 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE7 PUSH2 0xE2 CALLDATASIZE PUSH1 0x4 PUSH2 0xE6A JUMP JUMPDEST PUSH2 0x228 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x104 PUSH2 0x27A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF3 SWAP2 SWAP1 PUSH2 0xF52 JUMP JUMPDEST PUSH2 0x124 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0xEA2 JUMP JUMPDEST PUSH2 0x30C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF3 JUMP JUMPDEST PUSH2 0x14F PUSH2 0x14A CALLDATASIZE PUSH1 0x4 PUSH2 0xE41 JUMP JUMPDEST PUSH2 0x333 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14F PUSH2 0x15F CALLDATASIZE PUSH1 0x4 PUSH2 0xCF7 JUMP JUMPDEST PUSH2 0x44E JUMP JUMPDEST PUSH2 0x14F PUSH2 0x172 CALLDATASIZE PUSH1 0x4 PUSH2 0xCF7 JUMP JUMPDEST PUSH2 0x47F JUMP JUMPDEST PUSH2 0x124 PUSH2 0x185 CALLDATASIZE PUSH1 0x4 PUSH2 0xEA2 JUMP JUMPDEST PUSH2 0x49A JUMP JUMPDEST PUSH2 0x19D PUSH2 0x198 CALLDATASIZE PUSH1 0x4 PUSH2 0xCAB JUMP JUMPDEST PUSH2 0x4FA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF3 JUMP JUMPDEST PUSH2 0x104 PUSH2 0x580 JUMP JUMPDEST PUSH2 0x14F PUSH2 0x1C1 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x58F JUMP JUMPDEST PUSH2 0x14F PUSH2 0x1D4 CALLDATASIZE PUSH1 0x4 PUSH2 0xD32 JUMP JUMPDEST PUSH2 0x59E JUMP JUMPDEST PUSH2 0x104 PUSH2 0x1E7 CALLDATASIZE PUSH1 0x4 PUSH2 0xEA2 JUMP JUMPDEST PUSH2 0x5D6 JUMP JUMPDEST PUSH2 0xE7 PUSH2 0x1FA CALLDATASIZE PUSH1 0x4 PUSH2 0xCC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x259 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x274 JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD PUSH2 0x289 SWAP1 PUSH2 0x1075 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 0x2B5 SWAP1 PUSH2 0x1075 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x302 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2D7 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x302 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 0x2E5 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x317 DUP3 PUSH2 0x64A JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33E DUP3 PUSH2 0x49A JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76616C20746F2063757272656E74206F776E65 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x39 PUSH1 0xF9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 PUSH2 0x3CD JUMPI POP PUSH2 0x3CD DUP2 CALLER PUSH2 0x1FA JUMP JUMPDEST PUSH2 0x43F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76652063616C6C6572206973206E6F7420746F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6B656E206F776E6572206F7220617070726F76656420666F7220616C6C000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3A8 JUMP JUMPDEST PUSH2 0x449 DUP4 DUP4 PUSH2 0x6AC JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x458 CALLER DUP3 PUSH2 0x71A JUMP JUMPDEST PUSH2 0x474 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0xF65 JUMP JUMPDEST PUSH2 0x449 DUP4 DUP4 DUP4 PUSH2 0x799 JUMP JUMPDEST PUSH2 0x449 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x59E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x274 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x115490CDCC8C4E881A5B9D985B1A59081D1BDAD95B881251 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3A8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x564 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A2061646472657373207A65726F206973206E6F742061207661 PUSH1 0x44 DUP3 ADD MSTORE PUSH9 0x3634B21037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3A8 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x289 SWAP1 PUSH2 0x1075 JUMP JUMPDEST PUSH2 0x59A CALLER DUP4 DUP4 PUSH2 0x8FD JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x5A8 CALLER DUP4 PUSH2 0x71A JUMP JUMPDEST PUSH2 0x5C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0xF65 JUMP JUMPDEST PUSH2 0x5D0 DUP5 DUP5 DUP5 DUP5 PUSH2 0x9CC JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x5E1 DUP3 PUSH2 0x64A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F8 PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x618 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x643 JUMP JUMPDEST DUP1 PUSH2 0x622 DUP5 PUSH2 0x9FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x633 SWAP3 SWAP2 SWAP1 PUSH2 0xEE6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x6A9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x115490CDCC8C4E881A5B9D985B1A59081D1BDAD95B881251 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3A8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SWAP1 PUSH2 0x6E1 DUP3 PUSH2 0x49A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x726 DUP4 PUSH2 0x49A JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x76D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST DUP1 PUSH2 0x791 JUMPI POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x786 DUP5 PUSH2 0x30C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7AC DUP3 PUSH2 0x49A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x7D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0x1004 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x834 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3A8 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x847 DUP3 PUSH2 0x49A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x86D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0x1004 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND DUP1 DUP7 MSTORE PUSH1 0x3 DUP6 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 SSTORE SWAP1 DUP8 AND DUP1 DUP7 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP7 DUP7 MSTORE PUSH1 0x2 SWAP1 SWAP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND DUP5 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD DUP5 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 LOG4 POP POP POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x95F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F766520746F2063616C6C657200000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3A8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x9D7 DUP5 DUP5 DUP5 PUSH2 0x799 JUMP JUMPDEST PUSH2 0x9E3 DUP5 DUP5 DUP5 DUP5 PUSH2 0xAAA JUMP JUMPDEST PUSH2 0x5D0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0xFB2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xA0C DUP4 PUSH2 0xBB7 JUMP JUMPDEST PUSH1 0x1 ADD SWAP1 POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA3A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xA64 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP2 DUP2 ADD PUSH1 0x20 ADD JUMPDEST PUSH1 0x0 NOT ADD PUSH16 0x181899199A1A9B1B9C1CB0B131B232B3 PUSH1 0x81 SHL PUSH1 0xA DUP7 MOD BYTE DUP2 MSTORE8 PUSH1 0xA DUP6 DIV SWAP5 POP DUP5 PUSH2 0xA9D JUMPI PUSH2 0xAA2 JUMP JUMPDEST PUSH2 0xA6E JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO PUSH2 0xBAC JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0xAEE SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xF15 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xB38 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0xB35 SWAP2 DUP2 ADD SWAP1 PUSH2 0xE86 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0xB92 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0xB66 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xB6B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH2 0xB8A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0xFB2 JUMP JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ SWAP1 POP PUSH2 0x791 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 LT PUSH2 0xBF6 JUMPI PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 DIV SWAP3 POP PUSH1 0x40 ADD JUMPDEST PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 LT PUSH2 0xC22 JUMPI PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 DIV SWAP3 POP PUSH1 0x20 ADD JUMPDEST PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0xC40 JUMPI PUSH7 0x2386F26FC10000 DUP4 DIV SWAP3 POP PUSH1 0x10 ADD JUMPDEST PUSH4 0x5F5E100 DUP4 LT PUSH2 0xC58 JUMPI PUSH4 0x5F5E100 DUP4 DIV SWAP3 POP PUSH1 0x8 ADD JUMPDEST PUSH2 0x2710 DUP4 LT PUSH2 0xC6C JUMPI PUSH2 0x2710 DUP4 DIV SWAP3 POP PUSH1 0x4 ADD JUMPDEST PUSH1 0x64 DUP4 LT PUSH2 0xC7E JUMPI PUSH1 0x64 DUP4 DIV SWAP3 POP PUSH1 0x2 ADD JUMPDEST PUSH1 0xA DUP4 LT PUSH2 0x274 JUMPI PUSH1 0x1 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xCA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCBC JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x643 DUP3 PUSH2 0xC8F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCD7 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xCE0 DUP4 PUSH2 0xC8F JUMP JUMPDEST SWAP2 POP PUSH2 0xCEE PUSH1 0x20 DUP5 ADD PUSH2 0xC8F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD0B JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xD14 DUP5 PUSH2 0xC8F JUMP JUMPDEST SWAP3 POP PUSH2 0xD22 PUSH1 0x20 DUP6 ADD PUSH2 0xC8F JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD47 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xD50 DUP6 PUSH2 0xC8F JUMP JUMPDEST SWAP4 POP PUSH2 0xD5E PUSH1 0x20 DUP7 ADD PUSH2 0xC8F JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xD81 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD94 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xDA6 JUMPI PUSH2 0xDA6 PUSH2 0x10B0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xDCE JUMPI PUSH2 0xDCE PUSH2 0x10B0 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP11 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0xDE6 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP2 DUP3 ADD PUSH1 0x20 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE19 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xE22 DUP4 PUSH2 0xC8F JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xE36 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE53 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xE5C DUP4 PUSH2 0xC8F JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE7B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x643 DUP2 PUSH2 0x10C6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE97 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x643 DUP2 PUSH2 0x10C6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEB3 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xED2 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD PUSH2 0xEF8 DUP2 DUP5 PUSH1 0x20 DUP9 ADD PUSH2 0x1049 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP4 ADD SWAP1 PUSH2 0xF0C DUP2 DUP4 PUSH1 0x20 DUP9 ADD PUSH2 0x1049 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0xF48 SWAP1 DUP4 ADD DUP5 PUSH2 0xEBA JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x643 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xEBA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2D SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A2063616C6C6572206973206E6F7420746F6B656E206F776E65 PUSH1 0x40 DUP3 ADD MSTORE PUSH13 0x1C881BDC88185C1C1C9BDD9959 PUSH1 0x9A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x32 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F206E6F6E204552433732315265 PUSH1 0x40 DUP3 ADD MSTORE PUSH18 0x31B2B4BB32B91034B6B83632B6B2B73A32B9 PUSH1 0x71 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E736665722066726F6D20696E636F727265637420 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x37BBB732B9 PUSH1 0xD9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1064 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x104C JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x5D0 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x1089 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x10AA 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 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x6A9 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE5 EXP 0xF7 DUP7 PUSH3 0x15FF14 CALL LOG1 PUSH19 0x6B144689628C3DF012F0020258AB84681C73D0 0xEE DIV PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "628:16377:3:-:0;;;1390:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1456:13;;;;:5;;:13;;;;;:::i;:::-;-1:-1:-1;1479:17:3;;;;:7;;:17;;;;;:::i;:::-;;1390:113;;628:16377;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;628:16377:3;;;-1:-1:-1;628:16377:3;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:909:17;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;170:13;;-1:-1:-1;;;;;232:10:17;;;229:2;;;245:18;;:::i;:::-;320:2;314:9;288:2;374:13;;-1:-1:-1;;370:22:17;;;394:2;366:31;362:40;350:53;;;418:18;;;438:22;;;415:46;412:2;;;464:18;;:::i;:::-;504:10;500:2;493:22;539:2;531:6;524:18;561:4;551:14;;606:3;601:2;596;588:6;584:15;580:24;577:33;574:2;;;627:5;620;613:20;574:2;653:5;644:14;;667:133;681:2;678:1;675:9;667:133;;;769:14;;;765:23;;759:30;738:14;;;734:23;;727:63;692:10;;;;667:133;;;818:2;815:1;812:9;809:2;;;877:5;872:2;867;859:6;855:15;851:24;844:39;809:2;911:6;78:845;-1:-1:-1;;;;;;78:845:17:o;928:592::-;1027:6;1035;1088:2;1076:9;1067:7;1063:23;1059:32;1056:2;;;1109:6;1101;1094:22;1056:2;1141:16;;-1:-1:-1;;;;;1206:14:17;;;1203:2;;;1238:6;1230;1223:22;1203:2;1266:61;1319:7;1310:6;1299:9;1295:22;1266:61;:::i;:::-;1256:71;;1373:2;1362:9;1358:18;1352:25;1336:41;;1402:2;1392:8;1389:16;1386:2;;;1423:6;1415;1408:22;1386:2;;1451:63;1506:7;1495:8;1484:9;1480:24;1451:63;:::i;:::-;1441:73;;;1046:474;;;;;:::o;1525:380::-;1604:1;1600:12;;;;1647;;;1668:2;;1722:4;1714:6;1710:17;1700:27;;1668:2;1775;1767:6;1764:14;1744:18;1741:38;1738:2;;;1821:10;1816:3;1812:20;1809:1;1802:31;1856:4;1853:1;1846:15;1884:4;1881:1;1874:15;1738:2;;1580:325;;;:::o;1910:127::-;1971:10;1966:3;1962:20;1959:1;1952:31;2002:4;1999:1;1992:15;2026:4;2023:1;2016:15;1942:95;628:16377:3;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:10101:17",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:17",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:17"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:17",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:17"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:17",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:17",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:17"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:17"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:17",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:17"
                              },
                              "nodeType": "YulIf",
                              "src": "111:2:17"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:17",
                            "type": ""
                          }
                        ],
                        "src": "14:173:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:126:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "317:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "325:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "272:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "343:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "372:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "353:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "353:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:17",
                            "type": ""
                          }
                        ],
                        "src": "192:196:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "480:183:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "526:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "535:6:17"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "543:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "528:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "528:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "528:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "501:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "510:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "497:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "497:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "522:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "493:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "493:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "490:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "561:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "590:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "571:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "571:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "561:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "609:48:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "642:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "653:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "638:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "638:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "619:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "619:38:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "609:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "438:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "449:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "461:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "469:6:17",
                            "type": ""
                          }
                        ],
                        "src": "393:270:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "772:234:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "818:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "827:6:17"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "835:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "820:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "820:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "820:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "793:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "802:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "789:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "789:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "814:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "785:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "785:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "782:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "853:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "882:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "863:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "863:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "853:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "901:48:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "934:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "945:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "930:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "930:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "911:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "911:38:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "901:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "958:42:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "985:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "996:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "981:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "981:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "968:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "968:32:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "958:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "722:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "733:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "745:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "753:6:17",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "761:6:17",
                            "type": ""
                          }
                        ],
                        "src": "668:338:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1141:1053:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1188:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1197:6:17"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1205:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1190:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1190:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1190:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1162:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1171:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1158:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1158:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1183:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1154:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1154:33:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1151:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1223:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1252:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1233:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1233:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1223:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1271:48:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1304:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1315:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1300:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1300:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1281:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1281:38:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1271:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1328:42:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1355:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1366:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1351:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1351:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1338:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1338:32:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1328:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1379:46:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1410:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1421:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1406:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1406:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1393:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1393:32:17"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1383:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1434:28:17",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1444:18:17",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1438:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1489:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1498:6:17"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1506:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1491:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1491:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1491:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1477:6:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1485:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1474:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1474:14:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1471:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1524:32:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1538:9:17"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1549:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1534:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1534:22:17"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1528:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1604:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1613:6:17"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1621:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1606:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1606:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1606:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1583:2:17"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1587:4:17",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1579:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1579:13:17"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1594:7:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1575:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1575:27:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1568:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1568:35:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1565:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1639:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1662:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1649:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1649:16:17"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1643:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1688:22:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1690:16:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1690:18:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1690:18:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1680:2:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1684:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1677:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1677:10:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1674:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1719:17:17",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1733:2:17",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1729:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1729:7:17"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "1723:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1745:23:17",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1765:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1759:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1759:9:17"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1749:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1777:71:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1799:6:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_3",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1823:2:17"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1827:4:17",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1819:3:17"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1819:13:17"
                                              },
                                              {
                                                "name": "_4",
                                                "nodeType": "YulIdentifier",
                                                "src": "1834:2:17"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "1815:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1815:22:17"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1839:2:17",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1811:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1811:31:17"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "1844:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1807:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1807:40:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1795:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1795:53:17"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1781:10:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1907:22:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1909:16:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1909:18:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1909:18:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1866:10:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1878:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1863:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1863:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1886:10:17"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1898:6:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1883:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1883:22:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "1860:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1860:46:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1857:2:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1945:2:17",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1949:10:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1938:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1938:22:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1938:22:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1976:6:17"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1984:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1969:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1969:18:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1969:18:17"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2033:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2042:6:17"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2050:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2035:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2035:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2035:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2010:2:17"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "2014:2:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2006:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2006:11:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2019:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2002:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2002:20:17"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2024:7:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1999:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1999:33:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1996:2:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2085:6:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2093:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2081:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2081:15:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2102:2:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2106:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2098:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2098:11:17"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2111:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "2068:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2068:46:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2068:46:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "memPtr",
                                            "nodeType": "YulIdentifier",
                                            "src": "2138:6:17"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "2146:2:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2134:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2134:15:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2151:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2130:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2130:24:17"
                                  },
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2156:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2123:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2123:40:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2123:40:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2172:16:17",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "2182:6:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "2172:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1083:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1094:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1106:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1114:6:17",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1122:6:17",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "1130:6:17",
                            "type": ""
                          }
                        ],
                        "src": "1011:1183:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2283:283:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2329:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2338:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2346:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2331:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2331:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2331:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2304:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2313:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2300:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2300:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2325:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2296:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2296:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "2293:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2364:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2393:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2374:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2374:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2364:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2412:45:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2442:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2453:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2438:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2438:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2425:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2425:32:17"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2416:5:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2510:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2519:6:17"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2527:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2512:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2512:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2512:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2479:5:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "2500:5:17"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "2493:6:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2493:13:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "2486:6:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2486:21:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2476:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2476:32:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2469:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2469:40:17"
                              },
                              "nodeType": "YulIf",
                              "src": "2466:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2545:15:17",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2555:5:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2545:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_bool",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2241:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2252:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2264:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2272:6:17",
                            "type": ""
                          }
                        ],
                        "src": "2199:367:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2658:177:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2704:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2713:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2721:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2706:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2706:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2706:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2679:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2688:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2675:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2675:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2700:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2671:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2671:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "2668:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2739:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2768:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2749:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2749:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2739:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2787:42:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2814:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2825:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2810:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2810:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2797:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2797:32:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2787:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2616:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2627:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2639:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2647:6:17",
                            "type": ""
                          }
                        ],
                        "src": "2571:264:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2909:186:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2955:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2964:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2972:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2957:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2957:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2957:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2930:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2939:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2926:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2926:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2951:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2922:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2922:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "2919:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2990:36:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3016:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3003:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3003:23:17"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2994:5:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3059:5:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_bytes4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3035:23:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3035:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3035:30:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3074:15:17",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3084:5:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3074:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes4",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2875:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2886:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2898:6:17",
                            "type": ""
                          }
                        ],
                        "src": "2840:255:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3180:179:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3226:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3235:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3243:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3228:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3228:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3228:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3201:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3210:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3197:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3197:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3222:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3193:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3193:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "3190:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3261:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3280:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3274:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3274:16:17"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3265:5:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3323:5:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_bytes4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3299:23:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3299:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3299:30:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3338:15:17",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3348:5:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3338:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes4_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3146:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3157:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3169:6:17",
                            "type": ""
                          }
                        ],
                        "src": "3100:259:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3434:120:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3480:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3489:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3497:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3482:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3482:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3482:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3455:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3464:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3451:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3451:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3476:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3447:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3447:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "3444:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3515:33:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3538:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3525:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3525:23:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3515:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3400:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3411:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3423:6:17",
                            "type": ""
                          }
                        ],
                        "src": "3364:190:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3608:208:17",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3618:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3638:5:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3632:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3632:12:17"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "3622:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3660:3:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3665:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3653:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3653:19:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3653:19:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "3707:5:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3714:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3703:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3703:16:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3725:3:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3730:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3721:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3721:14:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3737:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3681:21:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3681:63:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3681:63:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3753:57:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3768:3:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "3781:6:17"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3789:2:17",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "3777:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3777:15:17"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3798:2:17",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "3794:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3794:7:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "3773:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3773:29:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3764:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3764:39:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3805:4:17",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3760:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3760:50:17"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "3753:3:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "3585:5:17",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3592:3:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "3600:3:17",
                            "type": ""
                          }
                        ],
                        "src": "3559:257:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4008:283:17",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4018:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4038:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4032:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4032:13:17"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4022:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4080:6:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4088:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4076:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4076:17:17"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4095:3:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4100:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4054:21:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4054:53:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4054:53:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4116:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4133:3:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4138:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4129:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4129:16:17"
                              },
                              "variables": [
                                {
                                  "name": "end_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4120:5:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4154:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4176:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4170:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4170:13:17"
                              },
                              "variables": [
                                {
                                  "name": "length_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4158:8:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4218:6:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4226:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4214:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4214:17:17"
                                  },
                                  {
                                    "name": "end_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4233:5:17"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4240:8:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4192:21:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4192:57:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4192:57:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4258:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "end_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4269:5:17"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4276:8:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4265:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4265:20:17"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "4258:3:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3976:3:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3981:6:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3989:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "4000:3:17",
                            "type": ""
                          }
                        ],
                        "src": "3821:470:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4397:102:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4407:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4419:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4430:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4415:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4415:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4407:4:17"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4449:9:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4464:6:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4480:3:17",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4485:1:17",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "4476:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4476:11:17"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4489:1:17",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "4472:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4472:19:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4460:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4460:32:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4442:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4442:51:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4442:51:17"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4366:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4377:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4388:4:17",
                            "type": ""
                          }
                        ],
                        "src": "4296:203:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4707:285:17",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4717:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4735:3:17",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4740:1:17",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "4731:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4731:11:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4744:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "4727:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4727:19:17"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4721:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4762:9:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4777:6:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4785:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4773:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4773:15:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4755:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4755:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4755:34:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4809:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4820:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4805:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4805:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4829:6:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4837:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4825:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4825:15:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4798:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4798:43:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4798:43:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4861:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4872:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4857:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4857:18:17"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4877:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4850:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4850:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4850:34:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4904:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4915:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4900:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4900:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4920:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4893:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4893:31:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4893:31:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4933:53:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "4958:6:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4970:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4981:3:17",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4966:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4966:19:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "4941:16:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4941:45:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4933:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4652:9:17",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4663:6:17",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4671:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4679:6:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4687:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4698:4:17",
                            "type": ""
                          }
                        ],
                        "src": "4504:488:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5092:92:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5102:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5114:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5125:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5110:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5110:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5102:4:17"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5144:9:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "5169:6:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "5162:6:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5162:14:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "5155:6:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5155:22:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5137:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5137:41:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5137:41:17"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5061:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5072:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5083:4:17",
                            "type": ""
                          }
                        ],
                        "src": "4997:187:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5310:98:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5327:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5338:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5320:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5320:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5320:21:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5350:52:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5375:6:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5387:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5398:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5383:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5383:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "5358:16:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5358:44:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5350:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5279:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5290:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5301:4:17",
                            "type": ""
                          }
                        ],
                        "src": "5189:219:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5587:235:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5604:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5615:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5597:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5597:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5597:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5638:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5649:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5634:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5634:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5654:2:17",
                                    "type": "",
                                    "value": "45"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5627:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5627:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5627:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5677:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5688:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5673:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5673:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5693:34:17",
                                    "type": "",
                                    "value": "ERC721: caller is not token owne"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5666:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5666:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5666:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5748:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5759:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5744:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5744:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5764:15:17",
                                    "type": "",
                                    "value": "r or approved"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5737:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5737:43:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5737:43:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5789:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5801:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5812:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5797:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5797:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5789:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5564:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5578:4:17",
                            "type": ""
                          }
                        ],
                        "src": "5413:409:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6001:240:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6018:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6029:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6011:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6011:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6011:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6052:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6063:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6048:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6048:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6068:2:17",
                                    "type": "",
                                    "value": "50"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6041:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6041:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6041:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6091:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6102:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6087:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6087:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "6107:34:17",
                                    "type": "",
                                    "value": "ERC721: transfer to non ERC721Re"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6080:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6080:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6080:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6162:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6173:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6158:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6158:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "6178:20:17",
                                    "type": "",
                                    "value": "ceiver implementer"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6151:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6151:48:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6151:48:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6208:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6220:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6231:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6216:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6216:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6208:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5978:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5992:4:17",
                            "type": ""
                          }
                        ],
                        "src": "5827:414:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6420:227:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6437:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6448:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6430:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6430:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6430:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6471:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6482:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6467:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6467:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6487:2:17",
                                    "type": "",
                                    "value": "37"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6460:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6460:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6460:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6510:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6521:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6506:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6506:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "6526:34:17",
                                    "type": "",
                                    "value": "ERC721: transfer from incorrect "
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6499:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6499:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6499:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6581:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6592:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6577:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6577:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "6597:7:17",
                                    "type": "",
                                    "value": "owner"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6570:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6570:35:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6570:35:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6614:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6626:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6637:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6622:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6622:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6614:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6397:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6411:4:17",
                            "type": ""
                          }
                        ],
                        "src": "6246:401:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6826:226:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6843:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6854:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6836:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6836:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6836:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6877:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6888:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6873:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6873:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6893:2:17",
                                    "type": "",
                                    "value": "36"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6866:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6866:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6866:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6916:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6927:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6912:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6912:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "6932:34:17",
                                    "type": "",
                                    "value": "ERC721: transfer to the zero add"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6905:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6905:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6905:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6987:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6998:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6983:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6983:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7003:6:17",
                                    "type": "",
                                    "value": "ress"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6976:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6976:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6976:34:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7019:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7031:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7042:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7027:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7027:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7019:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6803:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6817:4:17",
                            "type": ""
                          }
                        ],
                        "src": "6652:400:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7231:175:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7248:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7259:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7241:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7241:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7241:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7282:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7293:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7278:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7278:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7298:2:17",
                                    "type": "",
                                    "value": "25"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7271:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7271:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7271:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7321:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7332:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7317:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7317:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7337:27:17",
                                    "type": "",
                                    "value": "ERC721: approve to caller"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7310:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7310:55:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7310:55:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7374:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7386:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7397:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7382:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7382:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7374:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7208:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7222:4:17",
                            "type": ""
                          }
                        ],
                        "src": "7057:349:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7585:231:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7602:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7613:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7595:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7595:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7595:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7636:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7647:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7632:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7632:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7652:2:17",
                                    "type": "",
                                    "value": "41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7625:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7625:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7625:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7675:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7686:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7671:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7671:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7691:34:17",
                                    "type": "",
                                    "value": "ERC721: address zero is not a va"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7664:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7664:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7664:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7746:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7757:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7742:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7742:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7762:11:17",
                                    "type": "",
                                    "value": "lid owner"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7735:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7735:39:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7735:39:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7783:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7795:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7806:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7791:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7791:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7783:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7562:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7576:4:17",
                            "type": ""
                          }
                        ],
                        "src": "7411:405:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7995:174:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8012:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8023:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8005:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8005:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8005:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8046:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8057:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8042:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8042:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8062:2:17",
                                    "type": "",
                                    "value": "24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8035:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8035:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8035:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8085:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8096:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8081:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8081:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8101:26:17",
                                    "type": "",
                                    "value": "ERC721: invalid token ID"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8074:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8074:54:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8074:54:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8137:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8149:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8160:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8145:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8145:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8137:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7972:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7986:4:17",
                            "type": ""
                          }
                        ],
                        "src": "7821:348:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8348:223:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8365:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8376:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8358:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8358:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8358:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8399:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8410:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8395:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8395:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8415:2:17",
                                    "type": "",
                                    "value": "33"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8388:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8388:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8388:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8438:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8449:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8434:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8434:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8454:34:17",
                                    "type": "",
                                    "value": "ERC721: approval to current owne"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8427:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8427:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8427:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8509:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8520:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8505:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8505:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8525:3:17",
                                    "type": "",
                                    "value": "r"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8498:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8498:31:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8498:31:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8538:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8550:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8561:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8546:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8546:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8538:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8325:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8339:4:17",
                            "type": ""
                          }
                        ],
                        "src": "8174:397:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8750:251:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8767:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8778:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8760:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8760:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8760:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8801:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8812:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8797:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8797:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8817:2:17",
                                    "type": "",
                                    "value": "61"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8790:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8790:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8790:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8840:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8851:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8836:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8836:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8856:34:17",
                                    "type": "",
                                    "value": "ERC721: approve caller is not to"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8829:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8829:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8829:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8911:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8922:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8907:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8907:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8927:31:17",
                                    "type": "",
                                    "value": "ken owner or approved for all"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8900:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8900:59:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8900:59:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8968:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8980:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8991:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8976:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8976:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8968:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8727:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8741:4:17",
                            "type": ""
                          }
                        ],
                        "src": "8576:425:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9107:76:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9117:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9129:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9140:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9125:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9125:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9117:4:17"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9159:9:17"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9170:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9152:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9152:25:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9152:25:17"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9076:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9087:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9098:4:17",
                            "type": ""
                          }
                        ],
                        "src": "9006:177:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9241:205:17",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9251:10:17",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9260:1:17",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "9255:1:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9320:63:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "9345:3:17"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "9350:1:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "9341:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "9341:11:17"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "9364:3:17"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "9369:1:17"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "9360:3:17"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "9360:11:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "9354:5:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "9354:18:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "9334:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9334:39:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9334:39:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "9281:1:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9284:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9278:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9278:13:17"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "9292:19:17",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9294:15:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "9303:1:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9306:2:17",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9299:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9299:10:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "9294:1:17"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "9274:3:17",
                                "statements": []
                              },
                              "src": "9270:113:17"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9409:31:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "9422:3:17"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "9427:6:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "9418:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "9418:16:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9436:1:17",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "9411:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9411:27:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9411:27:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "9398:1:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9401:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9395:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9395:13:17"
                              },
                              "nodeType": "YulIf",
                              "src": "9392:2:17"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "9219:3:17",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "9224:3:17",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "9229:6:17",
                            "type": ""
                          }
                        ],
                        "src": "9188:258:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9506:325:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9516:22:17",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9530:1:17",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "9533:4:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "9526:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9526:12:17"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "9516:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9547:38:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "9577:4:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9583:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "9573:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9573:12:17"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "9551:18:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9624:31:17",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9626:27:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "9640:6:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9648:4:17",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "9636:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9636:17:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "9626:6:17"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "9604:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "9597:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9597:26:17"
                              },
                              "nodeType": "YulIf",
                              "src": "9594:2:17"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9714:111:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9735:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "9742:3:17",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "9747:10:17",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "9738:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "9738:20:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "9728:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9728:31:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9728:31:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9779:1:17",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9782:4:17",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "9772:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9772:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9772:15:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9807:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9810:4:17",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9800:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9800:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9800:15:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "9670:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "9693:6:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9701:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "9690:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9690:14:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "9667:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9667:38:17"
                              },
                              "nodeType": "YulIf",
                              "src": "9664:2:17"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "9486:4:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "9495:6:17",
                            "type": ""
                          }
                        ],
                        "src": "9451:380:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9868:95:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9885:1:17",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9892:3:17",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9897:10:17",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "9888:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9888:20:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9878:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9878:31:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9878:31:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9925:1:17",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9928:4:17",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9918:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9918:15:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9918:15:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9949:1:17",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9952:4:17",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "9942:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9942:15:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9942:15:17"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "9836:127:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10012:87:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10077:16:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10086:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10089:1:17",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10079:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10079:12:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10079:12:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "10035:5:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "10046:5:17"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10057:3:17",
                                                "type": "",
                                                "value": "224"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10062:10:17",
                                                "type": "",
                                                "value": "0xffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "10053:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10053:20:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "10042:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10042:32:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "10032:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10032:43:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10025:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10025:51:17"
                              },
                              "nodeType": "YulIf",
                              "src": "10022:2:17"
                            }
                          ]
                        },
                        "name": "validator_revert_bytes4",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "10001:5:17",
                            "type": ""
                          }
                        ],
                        "src": "9968:131:17"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value1, value1) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value3, value3) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value3, value3) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value3, value3) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(value3, value3) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), value3)\n        value3 := memPtr\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n        let value := calldataload(add(headStart, 32))\n        if iszero(eq(value, iszero(iszero(value)))) { revert(value1, value1) }\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_bytes4(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := mload(headStart)\n        validator_revert_bytes4(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        let end_1 := add(pos, length)\n        let length_1 := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), end_1, length_1)\n        end := add(end_1, length_1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\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_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 45)\n        mstore(add(headStart, 64), \"ERC721: caller is not token owne\")\n        mstore(add(headStart, 96), \"r or approved\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"ERC721: transfer to non ERC721Re\")\n        mstore(add(headStart, 96), \"ceiver implementer\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC721: transfer from incorrect \")\n        mstore(add(headStart, 96), \"owner\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC721: transfer to the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"ERC721: approve to caller\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 41)\n        mstore(add(headStart, 64), \"ERC721: address zero is not a va\")\n        mstore(add(headStart, 96), \"lid owner\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"ERC721: invalid token ID\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"ERC721: approval to current owne\")\n        mstore(add(headStart, 96), \"r\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 61)\n        mstore(add(headStart, 64), \"ERC721: approve caller is not to\")\n        mstore(add(headStart, 96), \"ken owner or approved for all\")\n        tail := add(headStart, 128)\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 copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_bytes4(value)\n    {\n        if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n    }\n}",
                  "id": 17,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101b3578063b88d4fde146101c6578063c87b56dd146101d9578063e985e9c5146101ec57600080fd5b80636352211e1461017757806370a082311461018a57806395d89b41146101ab57600080fd5b806301ffc9a7146100d457806306fdde03146100fc578063081812fc14610111578063095ea7b31461013c57806323b872dd1461015157806342842e0e14610164575b600080fd5b6100e76100e2366004610e6a565b610228565b60405190151581526020015b60405180910390f35b61010461027a565b6040516100f39190610f52565b61012461011f366004610ea2565b61030c565b6040516001600160a01b0390911681526020016100f3565b61014f61014a366004610e41565b610333565b005b61014f61015f366004610cf7565b61044e565b61014f610172366004610cf7565b61047f565b610124610185366004610ea2565b61049a565b61019d610198366004610cab565b6104fa565b6040519081526020016100f3565b610104610580565b61014f6101c1366004610e07565b61058f565b61014f6101d4366004610d32565b61059e565b6101046101e7366004610ea2565b6105d6565b6100e76101fa366004610cc5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061025957506001600160e01b03198216635b5e139f60e01b145b8061027457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461028990611075565b80601f01602080910402602001604051908101604052809291908181526020018280546102b590611075565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b5050505050905090565b60006103178261064a565b506000908152600460205260409020546001600160a01b031690565b600061033e8261049a565b9050806001600160a01b0316836001600160a01b031614156103b15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103cd57506103cd81336101fa565b61043f5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016103a8565b61044983836106ac565b505050565b610458338261071a565b6104745760405162461bcd60e51b81526004016103a890610f65565b610449838383610799565b6104498383836040518060200160405280600081525061059e565b6000818152600260205260408120546001600160a01b0316806102745760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103a8565b60006001600160a01b0382166105645760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103a8565b506001600160a01b031660009081526003602052604090205490565b60606001805461028990611075565b61059a3383836108fd565b5050565b6105a8338361071a565b6105c45760405162461bcd60e51b81526004016103a890610f65565b6105d0848484846109cc565b50505050565b60606105e18261064a565b60006105f860408051602081019091526000815290565b905060008151116106185760405180602001604052806000815250610643565b80610622846109ff565b604051602001610633929190610ee6565b6040516020818303038152906040525b9392505050565b6000818152600260205260409020546001600160a01b03166106a95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103a8565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906106e18261049a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806107268361049a565b9050806001600160a01b0316846001600160a01b0316148061076d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806107915750836001600160a01b03166107868461030c565b6001600160a01b0316145b949350505050565b826001600160a01b03166107ac8261049a565b6001600160a01b0316146107d25760405162461bcd60e51b81526004016103a890611004565b6001600160a01b0382166108345760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103a8565b826001600160a01b03166108478261049a565b6001600160a01b03161461086d5760405162461bcd60e51b81526004016103a890611004565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b0316141561095f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103a8565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6109d7848484610799565b6109e384848484610aaa565b6105d05760405162461bcd60e51b81526004016103a890610fb2565b60606000610a0c83610bb7565b600101905060008167ffffffffffffffff811115610a3a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610a64576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610a9d57610aa2565b610a6e565b509392505050565b60006001600160a01b0384163b15610bac57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610aee903390899088908890600401610f15565b602060405180830381600087803b158015610b0857600080fd5b505af1925050508015610b38575060408051601f3d908101601f19168201909252610b3591810190610e86565b60015b610b92573d808015610b66576040519150601f19603f3d011682016040523d82523d6000602084013e610b6b565b606091505b508051610b8a5760405162461bcd60e51b81526004016103a890610fb2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610791565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610bf65772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610c22576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610c4057662386f26fc10000830492506010015b6305f5e1008310610c58576305f5e100830492506008015b6127108310610c6c57612710830492506004015b60648310610c7e576064830492506002015b600a83106102745760010192915050565b80356001600160a01b0381168114610ca657600080fd5b919050565b600060208284031215610cbc578081fd5b61064382610c8f565b60008060408385031215610cd7578081fd5b610ce083610c8f565b9150610cee60208401610c8f565b90509250929050565b600080600060608486031215610d0b578081fd5b610d1484610c8f565b9250610d2260208501610c8f565b9150604084013590509250925092565b60008060008060808587031215610d47578081fd5b610d5085610c8f565b9350610d5e60208601610c8f565b925060408501359150606085013567ffffffffffffffff80821115610d81578283fd5b818701915087601f830112610d94578283fd5b813581811115610da657610da66110b0565b604051601f8201601f19908116603f01168101908382118183101715610dce57610dce6110b0565b816040528281528a6020848701011115610de6578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215610e19578182fd5b610e2283610c8f565b915060208301358015158114610e36578182fd5b809150509250929050565b60008060408385031215610e53578182fd5b610e5c83610c8f565b946020939093013593505050565b600060208284031215610e7b578081fd5b8135610643816110c6565b600060208284031215610e97578081fd5b8151610643816110c6565b600060208284031215610eb3578081fd5b5035919050565b60008151808452610ed2816020860160208601611049565b601f01601f19169290920160200192915050565b60008351610ef8818460208801611049565b835190830190610f0c818360208801611049565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610f4890830184610eba565b9695505050505050565b6020815260006106436020830184610eba565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60005b8381101561106457818101518382015260200161104c565b838111156105d05750506000910152565b600181811c9082168061108957607f821691505b602082108114156110aa57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146106a957600080fdfea2646970667358221220e50af7866215ff14f1a1726b144689628c3df012f0020258ab84681c73d0ee0464736f6c63430008040033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6352211E GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x1D9 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x1EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6352211E EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x111 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x164 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE7 PUSH2 0xE2 CALLDATASIZE PUSH1 0x4 PUSH2 0xE6A JUMP JUMPDEST PUSH2 0x228 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x104 PUSH2 0x27A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF3 SWAP2 SWAP1 PUSH2 0xF52 JUMP JUMPDEST PUSH2 0x124 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0xEA2 JUMP JUMPDEST PUSH2 0x30C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF3 JUMP JUMPDEST PUSH2 0x14F PUSH2 0x14A CALLDATASIZE PUSH1 0x4 PUSH2 0xE41 JUMP JUMPDEST PUSH2 0x333 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14F PUSH2 0x15F CALLDATASIZE PUSH1 0x4 PUSH2 0xCF7 JUMP JUMPDEST PUSH2 0x44E JUMP JUMPDEST PUSH2 0x14F PUSH2 0x172 CALLDATASIZE PUSH1 0x4 PUSH2 0xCF7 JUMP JUMPDEST PUSH2 0x47F JUMP JUMPDEST PUSH2 0x124 PUSH2 0x185 CALLDATASIZE PUSH1 0x4 PUSH2 0xEA2 JUMP JUMPDEST PUSH2 0x49A JUMP JUMPDEST PUSH2 0x19D PUSH2 0x198 CALLDATASIZE PUSH1 0x4 PUSH2 0xCAB JUMP JUMPDEST PUSH2 0x4FA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF3 JUMP JUMPDEST PUSH2 0x104 PUSH2 0x580 JUMP JUMPDEST PUSH2 0x14F PUSH2 0x1C1 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x58F JUMP JUMPDEST PUSH2 0x14F PUSH2 0x1D4 CALLDATASIZE PUSH1 0x4 PUSH2 0xD32 JUMP JUMPDEST PUSH2 0x59E JUMP JUMPDEST PUSH2 0x104 PUSH2 0x1E7 CALLDATASIZE PUSH1 0x4 PUSH2 0xEA2 JUMP JUMPDEST PUSH2 0x5D6 JUMP JUMPDEST PUSH2 0xE7 PUSH2 0x1FA CALLDATASIZE PUSH1 0x4 PUSH2 0xCC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x259 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x274 JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD PUSH2 0x289 SWAP1 PUSH2 0x1075 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 0x2B5 SWAP1 PUSH2 0x1075 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x302 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2D7 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x302 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 0x2E5 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x317 DUP3 PUSH2 0x64A JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33E DUP3 PUSH2 0x49A JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76616C20746F2063757272656E74206F776E65 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x39 PUSH1 0xF9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 PUSH2 0x3CD JUMPI POP PUSH2 0x3CD DUP2 CALLER PUSH2 0x1FA JUMP JUMPDEST PUSH2 0x43F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76652063616C6C6572206973206E6F7420746F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6B656E206F776E6572206F7220617070726F76656420666F7220616C6C000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3A8 JUMP JUMPDEST PUSH2 0x449 DUP4 DUP4 PUSH2 0x6AC JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x458 CALLER DUP3 PUSH2 0x71A JUMP JUMPDEST PUSH2 0x474 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0xF65 JUMP JUMPDEST PUSH2 0x449 DUP4 DUP4 DUP4 PUSH2 0x799 JUMP JUMPDEST PUSH2 0x449 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x59E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x274 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x115490CDCC8C4E881A5B9D985B1A59081D1BDAD95B881251 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3A8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x564 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A2061646472657373207A65726F206973206E6F742061207661 PUSH1 0x44 DUP3 ADD MSTORE PUSH9 0x3634B21037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3A8 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x289 SWAP1 PUSH2 0x1075 JUMP JUMPDEST PUSH2 0x59A CALLER DUP4 DUP4 PUSH2 0x8FD JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x5A8 CALLER DUP4 PUSH2 0x71A JUMP JUMPDEST PUSH2 0x5C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0xF65 JUMP JUMPDEST PUSH2 0x5D0 DUP5 DUP5 DUP5 DUP5 PUSH2 0x9CC JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x5E1 DUP3 PUSH2 0x64A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F8 PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x618 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x643 JUMP JUMPDEST DUP1 PUSH2 0x622 DUP5 PUSH2 0x9FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x633 SWAP3 SWAP2 SWAP1 PUSH2 0xEE6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x6A9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x115490CDCC8C4E881A5B9D985B1A59081D1BDAD95B881251 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3A8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SWAP1 PUSH2 0x6E1 DUP3 PUSH2 0x49A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x726 DUP4 PUSH2 0x49A JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x76D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST DUP1 PUSH2 0x791 JUMPI POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x786 DUP5 PUSH2 0x30C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7AC DUP3 PUSH2 0x49A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x7D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0x1004 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x834 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3A8 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x847 DUP3 PUSH2 0x49A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x86D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0x1004 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND DUP1 DUP7 MSTORE PUSH1 0x3 DUP6 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 SSTORE SWAP1 DUP8 AND DUP1 DUP7 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP7 DUP7 MSTORE PUSH1 0x2 SWAP1 SWAP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND DUP5 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD DUP5 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 LOG4 POP POP POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x95F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F766520746F2063616C6C657200000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3A8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x9D7 DUP5 DUP5 DUP5 PUSH2 0x799 JUMP JUMPDEST PUSH2 0x9E3 DUP5 DUP5 DUP5 DUP5 PUSH2 0xAAA JUMP JUMPDEST PUSH2 0x5D0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0xFB2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xA0C DUP4 PUSH2 0xBB7 JUMP JUMPDEST PUSH1 0x1 ADD SWAP1 POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA3A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xA64 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP2 DUP2 ADD PUSH1 0x20 ADD JUMPDEST PUSH1 0x0 NOT ADD PUSH16 0x181899199A1A9B1B9C1CB0B131B232B3 PUSH1 0x81 SHL PUSH1 0xA DUP7 MOD BYTE DUP2 MSTORE8 PUSH1 0xA DUP6 DIV SWAP5 POP DUP5 PUSH2 0xA9D JUMPI PUSH2 0xAA2 JUMP JUMPDEST PUSH2 0xA6E JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO PUSH2 0xBAC JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0xAEE SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xF15 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xB38 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0xB35 SWAP2 DUP2 ADD SWAP1 PUSH2 0xE86 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0xB92 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0xB66 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xB6B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH2 0xB8A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A8 SWAP1 PUSH2 0xFB2 JUMP JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ SWAP1 POP PUSH2 0x791 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 LT PUSH2 0xBF6 JUMPI PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 DIV SWAP3 POP PUSH1 0x40 ADD JUMPDEST PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 LT PUSH2 0xC22 JUMPI PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 DIV SWAP3 POP PUSH1 0x20 ADD JUMPDEST PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0xC40 JUMPI PUSH7 0x2386F26FC10000 DUP4 DIV SWAP3 POP PUSH1 0x10 ADD JUMPDEST PUSH4 0x5F5E100 DUP4 LT PUSH2 0xC58 JUMPI PUSH4 0x5F5E100 DUP4 DIV SWAP3 POP PUSH1 0x8 ADD JUMPDEST PUSH2 0x2710 DUP4 LT PUSH2 0xC6C JUMPI PUSH2 0x2710 DUP4 DIV SWAP3 POP PUSH1 0x4 ADD JUMPDEST PUSH1 0x64 DUP4 LT PUSH2 0xC7E JUMPI PUSH1 0x64 DUP4 DIV SWAP3 POP PUSH1 0x2 ADD JUMPDEST PUSH1 0xA DUP4 LT PUSH2 0x274 JUMPI PUSH1 0x1 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xCA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCBC JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x643 DUP3 PUSH2 0xC8F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCD7 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xCE0 DUP4 PUSH2 0xC8F JUMP JUMPDEST SWAP2 POP PUSH2 0xCEE PUSH1 0x20 DUP5 ADD PUSH2 0xC8F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD0B JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xD14 DUP5 PUSH2 0xC8F JUMP JUMPDEST SWAP3 POP PUSH2 0xD22 PUSH1 0x20 DUP6 ADD PUSH2 0xC8F JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD47 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xD50 DUP6 PUSH2 0xC8F JUMP JUMPDEST SWAP4 POP PUSH2 0xD5E PUSH1 0x20 DUP7 ADD PUSH2 0xC8F JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xD81 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD94 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xDA6 JUMPI PUSH2 0xDA6 PUSH2 0x10B0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xDCE JUMPI PUSH2 0xDCE PUSH2 0x10B0 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP11 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0xDE6 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP2 DUP3 ADD PUSH1 0x20 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE19 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xE22 DUP4 PUSH2 0xC8F JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xE36 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE53 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xE5C DUP4 PUSH2 0xC8F JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE7B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x643 DUP2 PUSH2 0x10C6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE97 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x643 DUP2 PUSH2 0x10C6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEB3 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xED2 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD PUSH2 0xEF8 DUP2 DUP5 PUSH1 0x20 DUP9 ADD PUSH2 0x1049 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP4 ADD SWAP1 PUSH2 0xF0C DUP2 DUP4 PUSH1 0x20 DUP9 ADD PUSH2 0x1049 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0xF48 SWAP1 DUP4 ADD DUP5 PUSH2 0xEBA JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x643 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xEBA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2D SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A2063616C6C6572206973206E6F7420746F6B656E206F776E65 PUSH1 0x40 DUP3 ADD MSTORE PUSH13 0x1C881BDC88185C1C1C9BDD9959 PUSH1 0x9A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x32 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F206E6F6E204552433732315265 PUSH1 0x40 DUP3 ADD MSTORE PUSH18 0x31B2B4BB32B91034B6B83632B6B2B73A32B9 PUSH1 0x71 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E736665722066726F6D20696E636F727265637420 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x37BBB732B9 PUSH1 0xD9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1064 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x104C JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x5D0 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x1089 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x10AA 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 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x6A9 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE5 EXP 0xF7 DUP7 PUSH3 0x15FF14 CALL LOG1 PUSH19 0x6B144689628C3DF012F0020258AB84681C73D0 0xEE DIV PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "628:16377:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1570:300;;;;;;:::i;:::-;;:::i;:::-;;;5162:14:17;;5155:22;5137:41;;5125:2;5110:18;1570:300:3;;;;;;;;2471:98;;;:::i;:::-;;;;;;;:::i;3935:167::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;4460:32:17;;;4442:51;;4430:2;4415:18;3935:167:3;4397:102:17;3468:406:3;;;;;;:::i;:::-;;:::i;:::-;;4612:296;;;;;;:::i;:::-;;:::i;4974:149::-;;;;;;:::i;:::-;;:::i;2190:219::-;;;;;;:::i;:::-;;:::i;1929:204::-;;;;;;:::i;:::-;;:::i;:::-;;;9152:25:17;;;9140:2;9125:18;1929:204:3;9107:76:17;2633:102:3;;;:::i;4169:153::-;;;;;;:::i;:::-;;:::i;5189:276::-;;;;;;:::i;:::-;;:::i;2801:::-;;;;;;:::i;:::-;;:::i;4388:162::-;;;;;;:::i;:::-;-1:-1:-1;;;;;4508:25:3;;;4485:4;4508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4388:162;1570:300;1672:4;-1:-1:-1;;;;;;1707:40:3;;-1:-1:-1;;;1707:40:3;;:104;;-1:-1:-1;;;;;;;1763:48:3;;-1:-1:-1;;;1763:48:3;1707:104;:156;;;-1:-1:-1;;;;;;;;;;937:40:12;;;1827:36:3;1688:175;1570:300;-1:-1:-1;;1570:300:3:o;2471:98::-;2525:13;2557:5;2550:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2471:98;:::o;3935:167::-;4011:7;4030:23;4045:7;4030:14;:23::i;:::-;-1:-1:-1;4071:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;4071:24:3;;3935:167::o;3468:406::-;3548:13;3564:23;3579:7;3564:14;:23::i;:::-;3548:39;;3611:5;-1:-1:-1;;;;;3605:11:3;:2;-1:-1:-1;;;;;3605:11:3;;;3597:57;;;;-1:-1:-1;;;3597:57:3;;8376:2:17;3597:57:3;;;8358:21:17;8415:2;8395:18;;;8388:30;8454:34;8434:18;;;8427:62;-1:-1:-1;;;8505:18:17;;;8498:31;8546:19;;3597:57:3;;;;;;;;;719:10:9;-1:-1:-1;;;;;3686:21:3;;;;:62;;-1:-1:-1;3711:37:3;3728:5;719:10:9;4388:162:3;:::i;3711:37::-;3665:170;;;;-1:-1:-1;;;3665:170:3;;8778:2:17;3665:170:3;;;8760:21:17;8817:2;8797:18;;;8790:30;8856:34;8836:18;;;8829:62;8927:31;8907:18;;;8900:59;8976:19;;3665:170:3;8750:251:17;3665:170:3;3846:21;3855:2;3859:7;3846:8;:21::i;:::-;3468:406;;;:::o;4612:296::-;4771:41;719:10:9;4804:7:3;4771:18;:41::i;:::-;4763:99;;;;-1:-1:-1;;;4763:99:3;;;;;;;:::i;:::-;4873:28;4883:4;4889:2;4893:7;4873:9;:28::i;4974:149::-;5077:39;5094:4;5100:2;5104:7;5077:39;;;;;;;;;;;;:16;:39::i;2190:219::-;2262:7;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:3;;2324:56;;;;-1:-1:-1;;;2324:56:3;;8023:2:17;2324:56:3;;;8005:21:17;8062:2;8042:18;;;8035:30;-1:-1:-1;;;8081:18:17;;;8074:54;8145:18;;2324:56:3;7995:174:17;1929:204:3;2001:7;-1:-1:-1;;;;;2028:19:3;;2020:73;;;;-1:-1:-1;;;2020:73:3;;7613:2:17;2020:73:3;;;7595:21:17;7652:2;7632:18;;;7625:30;7691:34;7671:18;;;7664:62;-1:-1:-1;;;7742:18:17;;;7735:39;7791:19;;2020:73:3;7585:231:17;2020:73:3;-1:-1:-1;;;;;;2110:16:3;;;;;:9;:16;;;;;;;1929:204::o;2633:102::-;2689:13;2721:7;2714:14;;;;;:::i;4169:153::-;4263:52;719:10:9;4296:8:3;4306;4263:18;:52::i;:::-;4169:153;;:::o;5189:276::-;5319:41;719:10:9;5352:7:3;5319:18;:41::i;:::-;5311:99;;;;-1:-1:-1;;;5311:99:3;;;;;;;:::i;:::-;5420:38;5434:4;5440:2;5444:7;5453:4;5420:13;:38::i;:::-;5189:276;;;;:::o;2801:::-;2874:13;2899:23;2914:7;2899:14;:23::i;:::-;2933:21;2957:10;3395:9;;;;;;;;;-1:-1:-1;3395:9:3;;;3319:92;2957:10;2933:34;;3008:1;2990:7;2984:21;:25;:86;;;;;;;;;;;;;;;;;3036:7;3045:18;:7;:16;:18::i;:::-;3019:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2984:86;2977:93;2801:276;-1:-1:-1;;;2801:276:3:o;13240:133::-;7185:4;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:3;13313:53;;;;-1:-1:-1;;;13313:53:3;;8023:2:17;13313:53:3;;;8005:21:17;8062:2;8042:18;;;8035:30;-1:-1:-1;;;8081:18:17;;;8074:54;8145:18;;13313:53:3;7995:174:17;13313:53:3;13240:133;:::o;12572:171::-;12646:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;12646:29:3;-1:-1:-1;;;;;12646:29:3;;;;;;;;:24;;12699:23;12646:24;12699:14;:23::i;:::-;-1:-1:-1;;;;;12690:46:3;;;;;;;;;;;12572:171;;:::o;7404:261::-;7497:4;7513:13;7529:23;7544:7;7529:14;:23::i;:::-;7513:39;;7581:5;-1:-1:-1;;;;;7570:16:3;:7;-1:-1:-1;;;;;7570:16:3;;:52;;;-1:-1:-1;;;;;;4508:25:3;;;4485:4;4508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7590:32;7570:87;;;;7650:7;-1:-1:-1;;;;;7626:31:3;:20;7638:7;7626:11;:20::i;:::-;-1:-1:-1;;;;;7626:31:3;;7570:87;7562:96;7404:261;-1:-1:-1;;;;7404:261:3:o;11257:1203::-;11381:4;-1:-1:-1;;;;;11354:31:3;:23;11369:7;11354:14;:23::i;:::-;-1:-1:-1;;;;;11354:31:3;;11346:81;;;;-1:-1:-1;;;11346:81:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;11445:16:3;;11437:65;;;;-1:-1:-1;;;11437:65:3;;6854:2:17;11437:65:3;;;6836:21:17;6893:2;6873:18;;;6866:30;6932:34;6912:18;;;6905:62;-1:-1:-1;;;6983:18:17;;;6976:34;7027:19;;11437:65:3;6826:226:17;11437:65:3;11682:4;-1:-1:-1;;;;;11655:31:3;:23;11670:7;11655:14;:23::i;:::-;-1:-1:-1;;;;;11655:31:3;;11647:81;;;;-1:-1:-1;;;11647:81:3;;;;;;;:::i;:::-;11797:24;;;;:15;:24;;;;;;;;11790:31;;-1:-1:-1;;;;;;11790:31:3;;;;;;-1:-1:-1;;;;;12265:15:3;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;12265:20:3;;;12299:13;;;;;;;;;:18;;11790:31;12299:18;;;12337:16;;;:7;:16;;;;;;:21;;;;;;;;;;12374:27;;11813:7;;12374:27;;;3468:406;;;:::o;12879:277::-;12999:8;-1:-1:-1;;;;;12990:17:3;:5;-1:-1:-1;;;;;12990:17:3;;;12982:55;;;;-1:-1:-1;;;12982:55:3;;7259:2:17;12982:55:3;;;7241:21:17;7298:2;7278:18;;;7271:30;7337:27;7317:18;;;7310:55;7382:18;;12982:55:3;7231:175:17;12982:55:3;-1:-1:-1;;;;;13047:25:3;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;13047:46:3;;;;;;;;;;13108:41;;5137::17;;;13108::3;;5110:18:17;13108:41:3;;;;;;;12879:277;;;:::o;6326:267::-;6438:28;6448:4;6454:2;6458:7;6438:9;:28::i;:::-;6484:47;6507:4;6513:2;6517:7;6526:4;6484:22;:47::i;:::-;6476:110;;;;-1:-1:-1;;;6476:110:3;;;;;;;:::i;447:696:11:-;503:13;552:14;569:17;580:5;569:10;:17::i;:::-;589:1;569:21;552:38;;604:20;638:6;627:18;;;;;;-1:-1:-1;;;627:18:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;627:18:11;-1:-1:-1;604:41:11;-1:-1:-1;765:28:11;;;781:2;765:28;820:280;-1:-1:-1;;851:5:11;-1:-1:-1;;;985:2:11;974:14;;969:30;851:5;956:44;1044:2;1035:11;;;-1:-1:-1;1068:10:11;1064:21;;1080:5;;1064:21;820:280;;;-1:-1:-1;1120:6:11;447:696;-1:-1:-1;;;447:696:11:o;13925:831:3:-;14074:4;-1:-1:-1;;;;;14094:13:3;;1702:19:8;:23;14090:660:3;;14129:71;;-1:-1:-1;;;14129:71:3;;-1:-1:-1;;;;;14129:36:3;;;;;:71;;719:10:9;;14180:4:3;;14186:7;;14195:4;;14129:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14129:71:3;;;;;;;;-1:-1:-1;;14129:71:3;;;;;;;;;;;;:::i;:::-;;;14125:573;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14367:13:3;;14363:321;;14409:60;;-1:-1:-1;;;14409:60:3;;;;;;;:::i;14363:321::-;14636:6;14630:13;14621:6;14617:2;14613:15;14606:38;14125:573;-1:-1:-1;;;;;;14250:51:3;-1:-1:-1;;;14250:51:3;;-1:-1:-1;14243:58:3;;14090:660;-1:-1:-1;14735:4:3;13925:831;;;;;;:::o;10139:916:14:-;10192:7;;-1:-1:-1;;;10267:17:14;;10263:103;;-1:-1:-1;;;10304:17:14;;;-1:-1:-1;10349:2:14;10339:12;10263:103;10392:8;10383:5;:17;10379:103;;10429:8;10420:17;;;-1:-1:-1;10465:2:14;10455:12;10379:103;10508:8;10499:5;:17;10495:103;;10545:8;10536:17;;;-1:-1:-1;10581:2:14;10571:12;10495:103;10624:7;10615:5;:16;10611:100;;10660:7;10651:16;;;-1:-1:-1;10695:1:14;10685:11;10611:100;10737:7;10728:5;:16;10724:100;;10773:7;10764:16;;;-1:-1:-1;10808:1:14;10798:11;10724:100;10850:7;10841:5;:16;10837:100;;10886:7;10877:16;;;-1:-1:-1;10921:1:14;10911:11;10837:100;10963:7;10954:5;:16;10950:66;;11000:1;10990:11;11042:6;10139:916;-1:-1:-1;;10139:916:14:o;14:173:17:-;82:20;;-1:-1:-1;;;;;131:31:17;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:196::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:270::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;;619:38;653:2;642:9;638:18;619:38;:::i;:::-;609:48;;480:183;;;;;:::o;668:338::-;745:6;753;761;814:2;802:9;793:7;789:23;785:32;782:2;;;835:6;827;820:22;782:2;863:29;882:9;863:29;:::i;:::-;853:39;;911:38;945:2;934:9;930:18;911:38;:::i;:::-;901:48;;996:2;985:9;981:18;968:32;958:42;;772:234;;;;;:::o;1011:1183::-;1106:6;1114;1122;1130;1183:3;1171:9;1162:7;1158:23;1154:33;1151:2;;;1205:6;1197;1190:22;1151:2;1233:29;1252:9;1233:29;:::i;:::-;1223:39;;1281:38;1315:2;1304:9;1300:18;1281:38;:::i;:::-;1271:48;;1366:2;1355:9;1351:18;1338:32;1328:42;;1421:2;1410:9;1406:18;1393:32;1444:18;1485:2;1477:6;1474:14;1471:2;;;1506:6;1498;1491:22;1471:2;1549:6;1538:9;1534:22;1524:32;;1594:7;1587:4;1583:2;1579:13;1575:27;1565:2;;1621:6;1613;1606:22;1565:2;1662;1649:16;1684:2;1680;1677:10;1674:2;;;1690:18;;:::i;:::-;1765:2;1759:9;1733:2;1819:13;;-1:-1:-1;;1815:22:17;;;1839:2;1811:31;1807:40;1795:53;;;1863:18;;;1883:22;;;1860:46;1857:2;;;1909:18;;:::i;:::-;1949:10;1945:2;1938:22;1984:2;1976:6;1969:18;2024:7;2019:2;2014;2010;2006:11;2002:20;1999:33;1996:2;;;2050:6;2042;2035:22;1996:2;2111;2106;2102;2098:11;2093:2;2085:6;2081:15;2068:46;2134:15;;;2151:2;2130:24;2123:40;;;;1141:1053;;;;-1:-1:-1;1141:1053:17;;-1:-1:-1;;;;1141:1053:17:o;2199:367::-;2264:6;2272;2325:2;2313:9;2304:7;2300:23;2296:32;2293:2;;;2346:6;2338;2331:22;2293:2;2374:29;2393:9;2374:29;:::i;:::-;2364:39;;2453:2;2442:9;2438:18;2425:32;2500:5;2493:13;2486:21;2479:5;2476:32;2466:2;;2527:6;2519;2512:22;2466:2;2555:5;2545:15;;;2283:283;;;;;:::o;2571:264::-;2639:6;2647;2700:2;2688:9;2679:7;2675:23;2671:32;2668:2;;;2721:6;2713;2706:22;2668:2;2749:29;2768:9;2749:29;:::i;:::-;2739:39;2825:2;2810:18;;;;2797:32;;-1:-1:-1;;;2658:177:17:o;2840:255::-;2898:6;2951:2;2939:9;2930:7;2926:23;2922:32;2919:2;;;2972:6;2964;2957:22;2919:2;3016:9;3003:23;3035:30;3059:5;3035:30;:::i;3100:259::-;3169:6;3222:2;3210:9;3201:7;3197:23;3193:32;3190:2;;;3243:6;3235;3228:22;3190:2;3280:9;3274:16;3299:30;3323:5;3299:30;:::i;3364:190::-;3423:6;3476:2;3464:9;3455:7;3451:23;3447:32;3444:2;;;3497:6;3489;3482:22;3444:2;-1:-1:-1;3525:23:17;;3434:120;-1:-1:-1;3434:120:17:o;3559:257::-;3600:3;3638:5;3632:12;3665:6;3660:3;3653:19;3681:63;3737:6;3730:4;3725:3;3721:14;3714:4;3707:5;3703:16;3681:63;:::i;:::-;3798:2;3777:15;-1:-1:-1;;3773:29:17;3764:39;;;;3805:4;3760:50;;3608:208;-1:-1:-1;;3608:208:17:o;3821:470::-;4000:3;4038:6;4032:13;4054:53;4100:6;4095:3;4088:4;4080:6;4076:17;4054:53;:::i;:::-;4170:13;;4129:16;;;;4192:57;4170:13;4129:16;4226:4;4214:17;;4192:57;:::i;:::-;4265:20;;4008:283;-1:-1:-1;;;;4008:283:17:o;4504:488::-;-1:-1:-1;;;;;4773:15:17;;;4755:34;;4825:15;;4820:2;4805:18;;4798:43;4872:2;4857:18;;4850:34;;;4920:3;4915:2;4900:18;;4893:31;;;4698:4;;4941:45;;4966:19;;4958:6;4941:45;:::i;:::-;4933:53;4707:285;-1:-1:-1;;;;;;4707:285:17:o;5189:219::-;5338:2;5327:9;5320:21;5301:4;5358:44;5398:2;5387:9;5383:18;5375:6;5358:44;:::i;5413:409::-;5615:2;5597:21;;;5654:2;5634:18;;;5627:30;5693:34;5688:2;5673:18;;5666:62;-1:-1:-1;;;5759:2:17;5744:18;;5737:43;5812:3;5797:19;;5587:235::o;5827:414::-;6029:2;6011:21;;;6068:2;6048:18;;;6041:30;6107:34;6102:2;6087:18;;6080:62;-1:-1:-1;;;6173:2:17;6158:18;;6151:48;6231:3;6216:19;;6001:240::o;6246:401::-;6448:2;6430:21;;;6487:2;6467:18;;;6460:30;6526:34;6521:2;6506:18;;6499:62;-1:-1:-1;;;6592:2:17;6577:18;;6570:35;6637:3;6622:19;;6420:227::o;9188:258::-;9260:1;9270:113;9284:6;9281:1;9278:13;9270:113;;;9360:11;;;9354:18;9341:11;;;9334:39;9306:2;9299:10;9270:113;;;9401:6;9398:1;9395:13;9392:2;;;-1:-1:-1;;9436:1:17;9418:16;;9411:27;9241:205::o;9451:380::-;9530:1;9526:12;;;;9573;;;9594:2;;9648:4;9640:6;9636:17;9626:27;;9594:2;9701;9693:6;9690:14;9670:18;9667:38;9664:2;;;9747:10;9742:3;9738:20;9735:1;9728:31;9782:4;9779:1;9772:15;9810:4;9807:1;9800:15;9664:2;;9506:325;;;:::o;9836:127::-;9897:10;9892:3;9888:20;9885:1;9878:31;9928:4;9925:1;9918:15;9952:4;9949:1;9942:15;9968:131;-1:-1:-1;;;;;;10042:32:17;;10032:43;;10022:2;;10089:1;10086;10079:12"
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including the Metadata extension, but not including the Enumerable extension, which is available separately as {ERC721Enumerable}.\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"constructor\":{\"details\":\"Initializes the contract by setting a `name` and a `symbol` to the token collection.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":\"ERC721\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005\",\"dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "IERC721": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Required interface of an ERC721 compliant contract.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":\"IERC721\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": {
        "IERC721Receiver": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "onERC721Received",
              "outputs": [
                {
                  "internalType": "bytes4",
                  "name": "",
                  "type": "bytes4"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "onERC721Received(address,address,uint256,bytes)": "150b7a02"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for any contract that wants to support safeTransfers from ERC721 asset contracts.\",\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\"}},\"title\":\"ERC721 token receiver interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":\"IERC721Receiver\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol": {
        "ERC721URIStorage": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fromTokenId",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_toTokenId",
                  "type": "uint256"
                }
              ],
              "name": "BatchMetadataUpdate",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_tokenId",
                  "type": "uint256"
                }
              ],
              "name": "MetadataUpdate",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"}],\"name\":\"BatchMetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"MetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC721 token with storage based token URI management.\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol\":\"ERC721URIStorage\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xd04b0f06e0666f29cf7cccc82894de541e19bb30a765b107b1e40bb7fe5f7d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b652499d098e88d8d878374616bb58434301061cae2253298b3f374044e0ddb\",\"dweb:/ipfs/QmbhAzctqo5jrSKU6idHdVyqfmzCcDbNUPvmx4GiXxfA6q\"]},\"@openzeppelin/contracts/interfaces/IERC4906.sol\":{\"keccak256\":\"0x2a9dadb806be80dd451821f1f1190eb9aa6f6edae85b185db29d60767cc0c5f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c25cac8dbe5bd96320053d23c3dacdb875e629d7c53ac00892eb7aa8500bde6\",\"dweb:/ipfs/Qmaf2oqbxxdJA9DphAoH4UCb8aXEAVM8fnu6qMxHJ5ta4A\"]},\"@openzeppelin/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xaf297d12d8d4a57fe01a70f0ef38908f208e3faedc577056d0b728fa2f3ccf0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fbfaf37123958822a2720a4ea29651be00edab787540b770f73d3e025d286ff8\",\"dweb:/ipfs/QmbzgWeTm8hJVUqWrNAwFjshqbYVyeGpQA8D1huzxQdmw6\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005\",\"dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol\":{\"keccak256\":\"0x7942989e3525aec1672469e4c65fb33fbd19c785c9cadbcb70fcbe1fe8bfdd37\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c9f260258c2be0e3b75f8ca285872c4bfa3a8fc97fdc2e62366c78abf22b54f\",\"dweb:/ipfs/QmTg1DMNwCDj8NVi6i1noqx7cxuRdPP4VyW4fzDkKAKmH2\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "IERC721Metadata": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-721\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"title\":\"ERC-721 Non-Fungible Token Standard, optional metadata extension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":\"IERC721Metadata\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "Address": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200322e503fe4fadc69a1caaa8b9d07b8e86f9d3d26179b1092008bc6d98c5081764736f6c63430008040033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SUB 0x22 0xE5 SUB INVALID 0x4F 0xAD 0xC6 SWAP11 SHR 0xAA 0xA8 0xB9 0xD0 PUSH28 0x8E86F9D3D26179B1092008BC6D98C5081764736F6C63430008040033 ",
              "sourceMap": "194:9169:8:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;194:9169:8;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200322e503fe4fadc69a1caaa8b9d07b8e86f9d3d26179b1092008bc6d98c5081764736f6c63430008040033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SUB 0x22 0xE5 SUB INVALID 0x4F 0xAD 0xC6 SWAP11 SHR 0xAA 0xA8 0xB9 0xD0 PUSH28 0x8E86F9D3D26179B1092008BC6D98C5081764736F6C63430008040033 ",
              "sourceMap": "194:9169:8:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "Context": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"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\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Counters.sol": {
        "Counters": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122016c7f342822180adc957cabcaee86ae0bc3669c1f9f3bcf324c6dd411eb49b6664736f6c63430008040033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 AND 0xC7 RETURN TIMESTAMP DUP3 0x21 DUP1 0xAD 0xC9 JUMPI 0xCA 0xBC 0xAE 0xE8 PUSH11 0xE0BC3669C1F9F3BCF324C6 0xDD COINBASE 0x1E 0xB4 SWAP12 PUSH7 0x64736F6C634300 ADDMOD DIV STOP CALLER ",
              "sourceMap": "424:971:10:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;424:971:10;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122016c7f342822180adc957cabcaee86ae0bc3669c1f9f3bcf324c6dd411eb49b6664736f6c63430008040033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 AND 0xC7 RETURN TIMESTAMP DUP3 0x21 DUP1 0xAD 0xC9 JUMPI 0xCA 0xBC 0xAE 0xE8 PUSH11 0xE0BC3669C1F9F3BCF324C6 0xDD COINBASE 0x1E 0xB4 SWAP12 PUSH7 0x64736F6C634300 ADDMOD DIV STOP CALLER ",
              "sourceMap": "424:971:10:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Matt Condon (@shrugs)\",\"details\":\"Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number of elements in a mapping, issuing ERC721 ids, or counting request ids. Include with `using Counters for Counters.Counter;`\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Counters\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Counters.sol\":\"Counters\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e1c62884d55b70f3ae5432b44bb3166ad71ae3acd19c57ab6ddc3c87c325ee\",\"dweb:/ipfs/QmezuXg5GK5oeA4F91EZhozBFekhq5TD966bHPH18cCqhu\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "Strings": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cfe06b3451c80181bed95ac63af9651cbb9abe3c8d14c8e97e40a9562083641064736f6c63430008040033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCF 0xE0 PUSH12 0x3451C80181BED95AC63AF965 SHR 0xBB SWAP11 0xBE EXTCODECOPY DUP14 EQ 0xC8 0xE9 PUSH31 0x40A9562083641064736F6C6343000804003300000000000000000000000000 ",
              "sourceMap": "220:2559:11:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;220:2559:11;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cfe06b3451c80181bed95ac63af9651cbb9abe3c8d14c8e97e40a9562083641064736f6c63430008040033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCF 0xE0 PUSH12 0x3451C80181BED95AC63AF965 SHR 0xBB SWAP11 0xBE EXTCODECOPY DUP14 EQ 0xC8 0xE9 PUSH31 0x40A9562083641064736F6C6343000804003300000000000000000000000000 ",
              "sourceMap": "220:2559:11:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"String operations.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/introspection/ERC165.sol": {
        "ERC165": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ``` Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "IERC165": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "Math": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220081f9f5114e65ab36b159dd65801895ce55e689e14f593362ac350c3b851ff3a64736f6c63430008040033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADDMOD 0x1F SWAP16 MLOAD EQ 0xE6 GAS 0xB3 PUSH12 0x159DD65801895CE55E689E14 CREATE2 SWAP4 CALLDATASIZE 0x2A 0xC3 POP 0xC3 0xB8 MLOAD SELFDESTRUCT GASPRICE PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "202:12582:14:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;202:12582:14;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220081f9f5114e65ab36b159dd65801895ce55e689e14f593362ac350c3b851ff3a64736f6c63430008040033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADDMOD 0x1F SWAP16 MLOAD EQ 0xE6 GAS 0xB3 PUSH12 0x159DD65801895CE55E689E14 CREATE2 SWAP4 CALLDATASIZE 0x2A 0xC3 POP 0xC3 0xB8 MLOAD SELFDESTRUCT GASPRICE PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "202:12582:14:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/math/SignedMath.sol": {
        "SignedMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ff2b20d7dc7fa35333284de51a9644f6c091c0c30512aad3588f0ac0b1dfbe9364736f6c63430008040033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFDESTRUCT 0x2B KECCAK256 0xD7 0xDC PUSH32 0xA35333284DE51A9644F6C091C0C30512AAD3588F0AC0B1DFBE9364736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "215:1047:15:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;215:1047:15;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ff2b20d7dc7fa35333284de51a9644f6c091c0c30512aad3588f0ac0b1dfbe9364736f6c63430008040033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFDESTRUCT 0x2B KECCAK256 0xD7 0xDC PUSH32 0xA35333284DE51A9644F6C091C0C30512AAD3588F0AC0B1DFBE9364736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "215:1047:15:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard signed math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":\"SignedMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]}},\"version\":1}"
        }
      },
      "contracts/NFTPromolider.sol": {
        "NFTPromolider": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fromTokenId",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_toTokenId",
                  "type": "uint256"
                }
              ],
              "name": "BatchMetadataUpdate",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_tokenId",
                  "type": "uint256"
                }
              ],
              "name": "MetadataUpdate",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "seller",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "price",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "currentlyListed",
                  "type": "bool"
                },
                {
                  "indexed": false,
                  "internalType": "enum NFTPromolider.Collection",
                  "name": "collection",
                  "type": "uint8"
                }
              ],
              "name": "TokenListedSuccess",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "destinationNetwork",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "destinationAddress",
                  "type": "address"
                }
              ],
              "name": "TokenLocked",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "seller",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "price",
                  "type": "uint256"
                }
              ],
              "name": "TokenSaleSuccess",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "TokenUnlocked",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "tokenURI",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "price",
                  "type": "uint256"
                },
                {
                  "internalType": "enum NFTPromolider.Collection",
                  "name": "collection",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isList",
                  "type": "bool"
                }
              ],
              "name": "createToken",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "executeSale",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getAllNFTs",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address payable",
                      "name": "owner",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "seller",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "price",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "currentlyListed",
                      "type": "bool"
                    },
                    {
                      "internalType": "enum NFTPromolider.Collection",
                      "name": "collection",
                      "type": "uint8"
                    }
                  ],
                  "internalType": "struct NFTPromolider.ListedToken[]",
                  "name": "",
                  "type": "tuple[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getListPrice",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getListedTokenForId",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address payable",
                      "name": "owner",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "seller",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "price",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "currentlyListed",
                      "type": "bool"
                    },
                    {
                      "internalType": "enum NFTPromolider.Collection",
                      "name": "collection",
                      "type": "uint8"
                    }
                  ],
                  "internalType": "struct NFTPromolider.ListedToken",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getMyNFTs",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address payable",
                      "name": "owner",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "seller",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "price",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "currentlyListed",
                      "type": "bool"
                    },
                    {
                      "internalType": "enum NFTPromolider.Collection",
                      "name": "collection",
                      "type": "uint8"
                    }
                  ],
                  "internalType": "struct NFTPromolider.ListedToken[]",
                  "name": "",
                  "type": "tuple[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "enum NFTPromolider.Collection",
                  "name": "collection",
                  "type": "uint8"
                }
              ],
              "name": "getNFTsByCollection",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address payable",
                      "name": "owner",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "seller",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "price",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "currentlyListed",
                      "type": "bool"
                    },
                    {
                      "internalType": "enum NFTPromolider.Collection",
                      "name": "collection",
                      "type": "uint8"
                    }
                  ],
                  "internalType": "struct NFTPromolider.ListedToken[]",
                  "name": "",
                  "type": "tuple[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getTokenHistory",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "owner",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "price",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timestamp",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct NFTPromolider.TokenHistory[]",
                  "name": "",
                  "type": "tuple[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "listPrice",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address payable",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "price",
                  "type": "uint256"
                }
              ],
              "name": "resellToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferToken",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "unSellToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_listPrice",
                  "type": "uint256"
                }
              ],
              "name": "updateListPrice",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:396:17",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:17",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "69:325:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "79:22:17",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "93:1:17",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "96:4:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "89:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "89:12:17"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "79:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "110:38:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "140:4:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "146:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "136:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "136:12:17"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "114:18:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "187:31:17",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "189:27:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "203:6:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "211:4:17",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "199:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "199:17:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "189:6:17"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "167:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "160:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "160:26:17"
                              },
                              "nodeType": "YulIf",
                              "src": "157:2:17"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "277:111:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "298:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "305:3:17",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "310:10:17",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "301:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "301:20:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "291:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "291:31:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "291:31:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "342:1:17",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "345:4:17",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "335:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "335:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "335:15:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "370:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "373:4:17",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "363:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "363:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "363:15:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "233:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "256:6:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "264:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "253:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "253:14:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "230:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "230:38:17"
                              },
                              "nodeType": "YulIf",
                              "src": "227:2:17"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "49:4:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "58:6:17",
                            "type": ""
                          }
                        ],
                        "src": "14:380:17"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}",
                  "id": 17,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526320c85580600a556064600b553480156200001e57600080fd5b50604080518082018252600d81526c27232a283937b6b7b634b232b960991b60208083019182528351808501909452600484526304e4654560e41b9084015281519192916200007091600091620000a1565b50805162000086906001906020840190620000a1565b5050600980546001600160a01b031916331790555062000184565b828054620000af9062000147565b90600052602060002090601f016020900481019282620000d357600085556200011e565b82601f10620000ee57805160ff19168380011785556200011e565b828001600101855582156200011e579182015b828111156200011e57825182559160200191906001019062000101565b506200012c92915062000130565b5090565b5b808211156200012c576000815560010162000131565b600181811c908216806200015c57607f821691505b602082108114156200017e57634e487b7160e01b600052602260045260246000fd5b50919050565b61302e80620001946000396000f3fe6080604052600436106101b75760003560e01c80638da5cb5b116100ec578063c322579c1161008a578063e0391b0911610064578063e0391b09146104c2578063e219fc75146104d7578063e22124bc146104ea578063e985e9c51461050a57600080fd5b8063c322579c1461046c578063c87b56dd1461048c578063d5abeb01146104ac57600080fd5b80639b1225c4116100c65780639b1225c414610406578063a22cb46514610419578063b1b654dd14610439578063b88d4fde1461044c57600080fd5b80638da5cb5b146103a45780638e264590146103c457806395d89b41146103f157600080fd5b806342842e0e116101595780636352211e116101335780636352211e1461032f57806368f1945f1461034f5780636eb588d91461036e57806370a082311461038457600080fd5b806342842e0e146102da578063446bb3d8146102fa578063629cb2e41461030d57600080fd5b8063095ea7b311610195578063095ea7b31461024b5780631072cbea1461026d5780632142ae2c1461028d57806323b872dd146102ba57600080fd5b806301ffc9a7146101bc57806306fdde03146101f1578063081812fc14610213575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004612a87565b61052a565b60405190151581526020015b60405180910390f35b3480156101fd57600080fd5b50610206610555565b6040516101e89190612d77565b34801561021f57600080fd5b5061023361022e366004612b52565b6105e7565b6040516001600160a01b0390911681526020016101e8565b34801561025757600080fd5b5061026b610266366004612a5e565b61060e565b005b34801561027957600080fd5b5061026b610288366004612a5e565b610729565b34801561029957600080fd5b506102ad6102a8366004612b52565b610864565b6040516101e89190612d15565b3480156102c657600080fd5b5061026b6102d5366004612981565b6108f9565b3480156102e657600080fd5b5061026b6102f5366004612981565b610936565b61026b610308366004612b52565b610941565b34801561031957600080fd5b50610322610a62565b6040516101e89190612cc7565b34801561033b57600080fd5b5061023361034a366004612b52565b610c5a565b34801561035b57600080fd5b50600a545b6040519081526020016101e8565b34801561037a57600080fd5b50610360600a5481565b34801561039057600080fd5b5061036061039f366004612935565b610cba565b3480156103b057600080fd5b50600954610233906001600160a01b031681565b3480156103d057600080fd5b506103e46103df366004612b52565b610d40565b6040516101e89190612eb8565b3480156103fd57600080fd5b50610206610dfe565b61026b610414366004612b52565b610e0d565b34801561042557600080fd5b5061026b610434366004612a35565b611071565b610360610447366004612ad9565b61107c565b34801561045857600080fd5b5061026b6104673660046129bc565b6111c1565b34801561047857600080fd5b5061026b610487366004612b52565b611200565b34801561049857600080fd5b506102066104a7366004612b52565b61126b565b3480156104b857600080fd5b50610360600b5481565b3480156104ce57600080fd5b50610322611374565b61026b6104e5366004612b6a565b61155c565b3480156104f657600080fd5b50610322610505366004612abf565b6116da565b34801561051657600080fd5b506101dc61052536600461294f565b611991565b60006001600160e01b03198216632483248360e11b148061054f575061054f826119bf565b92915050565b60606000805461056490612f60565b80601f016020809104026020016040519081016040528092919081815260200182805461059090612f60565b80156105dd5780601f106105b2576101008083540402835291602001916105dd565b820191906000526020600020905b8154815290600101906020018083116105c057829003601f168201915b5050505050905090565b60006105f282611a0f565b506000908152600460205260409020546001600160a01b031690565b600061061982610c5a565b9050806001600160a01b0316836001600160a01b0316141561068c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806106a857506106a88133611991565b61071a5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610683565b6107248383611a71565b505050565b6000818152600d60205260409020600101546001600160a01b031633146107925760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79206974656d206f776e65722063616e207472616e73666572000000006044820152606401610683565b6000818152600d602052604090206004015460ff16156107f05760405162461bcd60e51b8152602060048201526019602482015278151bdad95b881a5cc818dd5c9c995b9d1b1e481b1a5cdd1959603a1b6044820152606401610683565b336001600160a01b03831614156108555760405162461bcd60e51b8152602060048201526024808201527f4f6e6c792063616e207472616e73666572656420746f206f74686572732077616044820152631b1b195d60e21b6064820152608401610683565b610860338383611adf565b5050565b6060600e6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156108ee576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018082015484860152600290910154918301919091529083529092019101610899565b505050509050919050565b610904838383611b48565b6000908152600d6020526040902060010180546001600160a01b0319166001600160a01b039290921691909117905550565b610904838383611b79565b6000818152600d60205260409020600101546001600160a01b0316331461097a5760405162461bcd60e51b815260040161068390612e6e565b6000818152600d602052604090206004015460ff1615156001146109e05760405162461bcd60e51b815260206004820152601760248201527f4e667420697320616c726561647920756e6c69737465640000000000000000006044820152606401610683565b6000818152600d602052604080822060048101805460ff19169081905560018201546002830154600390930154935186957f74562ff4aca0f61b76e9b719261c3ed439529c9fbeb002c7ddfac9193b44800c95610a57956001600160a01b0394851695941693909261010090910460ff1690612c56565b60405180910390a250565b60606000610a6f60075490565b9050600060015b828111610abf576000818152600d60205260409020600101546001600160a01b0316331415610aad5781610aa981612f9b565b9250505b80610ab781612f9b565b915050610a76565b5060008167ffffffffffffffff811115610ae957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610b2257816020015b610b0f6127b8565b815260200190600190039081610b075790505b509050600060015b848111610c50576000818152600d60205260409020600101546001600160a01b0316331415610c3e576000818152600d6020908152604091829020825160c0810184528154815260018201546001600160a01b03908116938201939093526002808301549093169381019390935260038101546060840152600481015460ff80821615156080860152919260a085019261010090920490911690811115610be157634e487b7160e01b600052602160045260246000fd5b6002811115610c0057634e487b7160e01b600052602160045260246000fd5b81525050838381518110610c2457634e487b7160e01b600052603260045260246000fd5b60200260200101819052508180610c3a90612f9b565b9250505b80610c4881612f9b565b915050610b2a565b5090949350505050565b6000818152600260205260408120546001600160a01b03168061054f5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610683565b60006001600160a01b038216610d245760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610683565b506001600160a01b031660009081526003602052604090205490565b610d486127b8565b6000828152600d6020908152604091829020825160c0810184528154815260018201546001600160a01b03908116938201939093526002808301549093169381019390935260038101546060840152600481015460ff80821615156080860152919260a085019261010090920490911690811115610dd657634e487b7160e01b600052602160045260246000fd5b6002811115610df557634e487b7160e01b600052602160045260246000fd5b90525092915050565b60606001805461056490612f60565b6000818152600d602052604090206004015460ff16610e6e5760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e206e6f742063757272656e746c79206c69737465640000000000006044820152606401610683565b6000818152600d6020526040902060030154341015610ecf5760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742066756e64732073656e740000000000000000006044820152606401610683565b6000818152600d6020526040812060018101546003909101546001600160a01b03909116916064610f01836005612efe565b610f0b9190612ede565b90506000610f198284612f1d565b6000868152600d6020526040902060048101805460ff1916905560020180546001600160a01b0319166001600160a01b0387161790556008805460010190559050610f65843387611adf565b600954600a546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610fa1573d6000803e3d6000fd5b506040516001600160a01b0385169082156108fc029083906000818181858888f19350505050158015610fd8573d6000803e3d6000fd5b506009546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611013573d6000803e3d6000fd5b50604080513381526001600160a01b038616602082015290810184905285907ff81c2545e78ad9dd77b3ba731ab2cfdce225338866d32fdd91f92f1fda49f14c9060600160405180910390a261106a853385611b94565b5050505050565b610860338383611d1c565b6000600b5461108a60075490565b106110d05760405162461bcd60e51b815260206004820152601660248201527513999d081b585e081cdd5c1c1b1e481c995858da195960521b6044820152606401610683565b60008360028111156110f257634e487b7160e01b600052602160045260246000fd5b148061111d5750600183600281111561111b57634e487b7160e01b600052602160045260246000fd5b145b806111475750600283600281111561114557634e487b7160e01b600052602160045260246000fd5b145b61117b5760405162461bcd60e51b815260206004820152600560248201526422b93937b960d91b6044820152606401610683565b611189600780546001019055565b600061119460075490565b90506111a03382611deb565b6111aa8187611e05565b6111b681868686611ed7565b90505b949350505050565b6111cd848484846120cc565b506000908152600d6020526040902060010180546001600160a01b0319166001600160a01b039290921691909117905550565b6009546001600160a01b031633146112665760405162461bcd60e51b815260206004820152602360248201527f4f6e6c79206f776e65722063616e20757064617465206c697374696e6720707260448201526269636560e81b6064820152608401610683565b600a55565b606061127682611a0f565b6000828152600660205260408120805461128f90612f60565b80601f01602080910402602001604051908101604052809291908181526020018280546112bb90612f60565b80156113085780601f106112dd57610100808354040283529160200191611308565b820191906000526020600020905b8154815290600101906020018083116112eb57829003601f168201915b50505050509050600061132660408051602081019091526000815290565b9050805160001415611339575092915050565b81511561136b578082604051602001611353929190612c27565b60405160208183030381529060405292505050919050565b6111b984612104565b6060600061138160075490565b9050600060015b8281116113ce576000818152600d602052604090206004015460ff161515600114156113bc57816113b881612f9b565b9250505b806113c681612f9b565b915050611388565b5060008167ffffffffffffffff8111156113f857634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561143157816020015b61141e6127b8565b8152602001906001900390816114165790505b509050600060015b848111610c50576000818152600d602052604090206004015460ff1615156001141561154a576000818152600d6020908152604091829020825160c0810184528154815260018201546001600160a01b03908116938201939093526002808301549093169381019390935260038101546060840152600481015460ff80821615156080860152919260a0850192610100909204909116908111156114ed57634e487b7160e01b600052602160045260246000fd5b600281111561150c57634e487b7160e01b600052602160045260246000fd5b8152505083838151811061153057634e487b7160e01b600052603260045260246000fd5b6020026020010181905250818061154690612f9b565b9250505b8061155481612f9b565b915050611439565b6000828152600d60205260409020600101546001600160a01b031633146115955760405162461bcd60e51b815260040161068390612e6e565b6000828152600d602052604090206004015460ff16156115ef5760405162461bcd60e51b815260206004820152601560248201527413999d081a5cc8185b1c9958591e481b1a5cdd1959605a1b6044820152606401610683565b600a54341461164c5760405162461bcd60e51b8152602060048201526024808201527f5072696365206d75737420626520657175616c20746f206c697374696e6720706044820152637269636560e01b6064820152608401610683565b6000828152600d60205260409081902060048101805460ff191660019081179182905560038301859055600290920180546001600160a01b03191633908117909155925185937f74562ff4aca0f61b76e9b719261c3ed439529c9fbeb002c7ddfac9193b44800c936116ce939192309288929161010090910460ff1690612c56565b60405180910390a25050565b606060006116e760075490565b9050600060015b8281116117965784600281111561171557634e487b7160e01b600052602160045260246000fd5b6000828152600d6020526040902060040154610100900460ff16600281111561174e57634e487b7160e01b600052602160045260246000fd5b14801561177157506000818152600d602052604090206004015460ff1615156001145b15611784578161178081612f9b565b9250505b8061178e81612f9b565b9150506116ee565b5060008167ffffffffffffffff8111156117c057634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156117f957816020015b6117e66127b8565b8152602001906001900390816117de5790505b509050600060015b8481116119865786600281111561182857634e487b7160e01b600052602160045260246000fd5b6000828152600d6020526040902060040154610100900460ff16600281111561186157634e487b7160e01b600052602160045260246000fd5b14801561188457506000818152600d602052604090206004015460ff1615156001145b15611974576000818152600d6020908152604091829020825160c0810184528154815260018201546001600160a01b03908116938201939093526002808301549093169381019390935260038101546060840152600481015460ff80821615156080860152919260a08501926101009092049091169081111561191757634e487b7160e01b600052602160045260246000fd5b600281111561193657634e487b7160e01b600052602160045260246000fd5b8152505083838151811061195a57634e487b7160e01b600052603260045260246000fd5b6020026020010181905250818061197090612f9b565b9250505b8061197e81612f9b565b915050611801565b509095945050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b14806119f057506001600160e01b03198216635b5e139f60e01b145b8061054f57506301ffc9a760e01b6001600160e01b031983161461054f565b6000818152600260205260409020546001600160a01b0316611a6e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610683565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611aa682610c5a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600d602052604090206004015460ff1615611b3d5760405162461bcd60e51b8152602060048201526019602482015278151bdad95b881a5cc818dd5c9c995b9d1b1e481b1a5cdd1959603a1b6044820152606401610683565b610904838383612178565b611b5233826122dc565b611b6e5760405162461bcd60e51b815260040161068390612d8a565b610724838383611adf565b610724838383604051806020016040528060008152506111c1565b6000838152600e60205260409020805460031415611cb45760005b6002811015611c645781611bc4826001612ec6565b81548110611be257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201828281548110611c1057634e487b7160e01b600052603260045260246000fd5b60009182526020909120825460039092020180546001600160a01b0319166001600160a01b039092169190911781556001808301549082015560029182015491015580611c5c81612f9b565b915050611baf565b5080805480611c8357634e487b7160e01b600052603160045260246000fd5b60008281526020812060036000199093019283020180546001600160a01b0319168155600181018290556002015590555b604080516060810182526001600160a01b0394851681526020808201948552429282019283528354600180820186556000958652919094209151600390940290910180546001600160a01b031916939095169290921784559151908301555160029091015550565b816001600160a01b0316836001600160a01b03161415611d7e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610683565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61086082826040518060200160405280600081525061233a565b6000828152600260205260409020546001600160a01b0316611e805760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610683565b60008281526006602090815260409091208251611e9f928401906127eb565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b600a543414611f1f5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd081c1c9a58d9481cd95b9d60621b6044820152606401610683565b60008311611f6f5760405162461bcd60e51b815260206004820152601f60248201527f5072696365206d7573742062652067726561746572207468616e207a65726f006044820152606401610683565b6040518060c00160405280858152602001336001600160a01b0316815260200160006001600160a01b031681526020018481526020018215158152602001836002811115611fcd57634e487b7160e01b600052602160045260246000fd5b90526000858152600d602090815260409182902083518155908301516001820180546001600160a01b039283166001600160a01b0319918216179091559284015160028084018054929093169190941617905560608301516003820155608083015160048201805491151560ff1983168117825560a08601519394919261ff001990911661ffff19909116179061010090849081111561207d57634e487b7160e01b600052602160045260246000fd5b0217905550905050837f74562ff4aca0f61b76e9b719261c3ed439529c9fbeb002c7ddfac9193b44800c3360008685876040516120be959493929190612c56565b60405180910390a250505050565b6120d633836122dc565b6120f25760405162461bcd60e51b815260040161068390612d8a565b6120fe8484848461236d565b50505050565b606061210f82611a0f565b600061212660408051602081019091526000815290565b905060008151116121465760405180602001604052806000815250612171565b80612150846123a0565b604051602001612161929190612c27565b6040516020818303038152906040525b9392505050565b826001600160a01b031661218b82610c5a565b6001600160a01b0316146121b15760405162461bcd60e51b815260040161068390612e29565b6001600160a01b0382166122135760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610683565b826001600160a01b031661222682610c5a565b6001600160a01b03161461224c5760405162461bcd60e51b815260040161068390612e29565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000806122e883610c5a565b9050806001600160a01b0316846001600160a01b0316148061230f575061230f8185611991565b806111b95750836001600160a01b0316612328846105e7565b6001600160a01b031614949350505050565b612344838361244b565b61235160008484846125d6565b6107245760405162461bcd60e51b815260040161068390612dd7565b612378848484611adf565b612384848484846125d6565b6120fe5760405162461bcd60e51b815260040161068390612dd7565b606060006123ad836126e0565b600101905060008167ffffffffffffffff8111156123db57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612405576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461243e57612443565b61240f565b509392505050565b6001600160a01b0382166124a15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610683565b6000818152600260205260409020546001600160a01b0316156125065760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610683565b6000818152600260205260409020546001600160a01b03161561256b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610683565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156126d857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061261a903390899088908890600401612c94565b602060405180830381600087803b15801561263457600080fd5b505af1925050508015612664575060408051601f3d908101601f1916820190925261266191810190612aa3565b60015b6126be573d808015612692576040519150601f19603f3d011682016040523d82523d6000602084013e612697565b606091505b5080516126b65760405162461bcd60e51b815260040161068390612dd7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506111b9565b5060016111b9565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061271f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061274b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061276957662386f26fc10000830492506010015b6305f5e1008310612781576305f5e100830492506008015b612710831061279557612710830492506004015b606483106127a7576064830492506002015b600a831061054f5760010192915050565b6040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b8280546127f790612f60565b90600052602060002090601f016020900481019282612819576000855561285f565b82601f1061283257805160ff191683800117855561285f565b8280016001018555821561285f579182015b8281111561285f578251825591602001919060010190612844565b5061286b92915061286f565b5090565b5b8082111561286b5760008155600101612870565b600067ffffffffffffffff8084111561289f5761289f612fcc565b604051601f8501601f19908116603f011681019082821181831017156128c7576128c7612fcc565b816040528093508581528686860111156128e057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461291157600080fd5b919050565b8035801515811461291157600080fd5b80356003811061291157600080fd5b600060208284031215612946578081fd5b612171826128fa565b60008060408385031215612961578081fd5b61296a836128fa565b9150612978602084016128fa565b90509250929050565b600080600060608486031215612995578081fd5b61299e846128fa565b92506129ac602085016128fa565b9150604084013590509250925092565b600080600080608085870312156129d1578081fd5b6129da856128fa565b93506129e8602086016128fa565b925060408501359150606085013567ffffffffffffffff811115612a0a578182fd5b8501601f81018713612a1a578182fd5b612a2987823560208401612884565b91505092959194509250565b60008060408385031215612a47578182fd5b612a50836128fa565b915061297860208401612916565b60008060408385031215612a70578182fd5b612a79836128fa565b946020939093013593505050565b600060208284031215612a98578081fd5b813561217181612fe2565b600060208284031215612ab4578081fd5b815161217181612fe2565b600060208284031215612ad0578081fd5b61217182612926565b60008060008060808587031215612aee578384fd5b843567ffffffffffffffff811115612b04578485fd5b8501601f81018713612b14578485fd5b612b2387823560208401612884565b94505060208501359250612b3960408601612926565b9150612b4760608601612916565b905092959194509250565b600060208284031215612b63578081fd5b5035919050565b60008060408385031215612b7c578182fd5b50508035926020909101359150565b60008151808452612ba3816020860160208601612f34565b601f01601f19169290920160200192915050565b60038110612bd557634e487b7160e01b600052602160045260246000fd5b9052565b80518252602081015160018060a01b03808216602085015280604084015116604085015250506060810151606083015260808101511515608083015260a081015161072460a0840182612bb7565b60008351612c39818460208801612f34565b835190830190612c4d818360208801612f34565b01949350505050565b6001600160a01b0386811682528516602082015260408101849052821515606082015260a08101612c8a6080830184612bb7565b9695505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c8a90830184612b8b565b6020808252825182820181905260009190848201906040850190845b81811015612d0957612cf6838551612bd9565b9284019260c09290920191600101612ce3565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015612d6a57815180516001600160a01b0316855286810151878601528501518585015260609093019290850190600101612d32565b5091979650505050505050565b6020815260006121716020830184612b8b565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252602a908201527f4f6e6c79206974656d206f776e65722063616e20706572666f726d20746869736040820152691037b832b930ba34b7b760b11b606082015260800190565b60c0810161054f8284612bd9565b60008219821115612ed957612ed9612fb6565b500190565b600082612ef957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612f1857612f18612fb6565b500290565b600082821015612f2f57612f2f612fb6565b500390565b60005b83811015612f4f578181015183820152602001612f37565b838111156120fe5750506000910152565b600181811c90821680612f7457607f821691505b60208210811415612f9557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612faf57612faf612fb6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611a6e57600080fdfea2646970667358221220387bcaad981891fa7041a9af96ac01c8696001b5fa6444bc0cd6df5885f22efb64736f6c63430008040033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH4 0x20C85580 PUSH1 0xA SSTORE PUSH1 0x64 PUSH1 0xB SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0xD DUP2 MSTORE PUSH13 0x27232A283937B6B7B634B232B9 PUSH1 0x99 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE PUSH1 0x4 DUP5 MSTORE PUSH4 0x4E46545 PUSH1 0xE4 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 PUSH3 0x70 SWAP2 PUSH1 0x0 SWAP2 PUSH3 0xA1 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x86 SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0xA1 JUMP JUMPDEST POP POP PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE POP PUSH3 0x184 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0xAF SWAP1 PUSH3 0x147 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0xD3 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x11E JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xEE JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x11E JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x11E JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x11E JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x101 JUMP JUMPDEST POP PUSH3 0x12C SWAP3 SWAP2 POP PUSH3 0x130 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x12C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x131 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x15C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x17E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x302E DUP1 PUSH3 0x194 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1B7 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xEC JUMPI DUP1 PUSH4 0xC322579C GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xE0391B09 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xE0391B09 EQ PUSH2 0x4C2 JUMPI DUP1 PUSH4 0xE219FC75 EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0xE22124BC EQ PUSH2 0x4EA JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x50A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC322579C EQ PUSH2 0x46C JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0xD5ABEB01 EQ PUSH2 0x4AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9B1225C4 GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0x9B1225C4 EQ PUSH2 0x406 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x419 JUMPI DUP1 PUSH4 0xB1B654DD EQ PUSH2 0x439 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x8E264590 EQ PUSH2 0x3C4 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42842E0E GT PUSH2 0x159 JUMPI DUP1 PUSH4 0x6352211E GT PUSH2 0x133 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x32F JUMPI DUP1 PUSH4 0x68F1945F EQ PUSH2 0x34F JUMPI DUP1 PUSH4 0x6EB588D9 EQ PUSH2 0x36E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42842E0E EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0x446BB3D8 EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x629CB2E4 EQ PUSH2 0x30D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x195 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x24B JUMPI DUP1 PUSH4 0x1072CBEA EQ PUSH2 0x26D JUMPI DUP1 PUSH4 0x2142AE2C EQ PUSH2 0x28D JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x213 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x1D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A87 JUMP JUMPDEST PUSH2 0x52A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x555 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x2D77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x233 PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0x5E7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x266 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A5E JUMP JUMPDEST PUSH2 0x60E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x288 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A5E JUMP JUMPDEST PUSH2 0x729 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AD PUSH2 0x2A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0x864 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x2D15 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x2D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2981 JUMP JUMPDEST PUSH2 0x8F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x2F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2981 JUMP JUMPDEST PUSH2 0x936 JUMP JUMPDEST PUSH2 0x26B PUSH2 0x308 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0x941 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x319 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x322 PUSH2 0xA62 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x2CC7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x233 PUSH2 0x34A CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0xC5A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xA SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x360 PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x390 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x360 PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x2935 JUMP JUMPDEST PUSH2 0xCBA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x9 SLOAD PUSH2 0x233 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E4 PUSH2 0x3DF CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0xD40 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x2EB8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0xDFE JUMP JUMPDEST PUSH2 0x26B PUSH2 0x414 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0xE0D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x425 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x434 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A35 JUMP JUMPDEST PUSH2 0x1071 JUMP JUMPDEST PUSH2 0x360 PUSH2 0x447 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x107C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x467 CALLDATASIZE PUSH1 0x4 PUSH2 0x29BC JUMP JUMPDEST PUSH2 0x11C1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x487 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0x1200 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x4A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0x126B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x360 PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x322 PUSH2 0x1374 JUMP JUMPDEST PUSH2 0x26B PUSH2 0x4E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B6A JUMP JUMPDEST PUSH2 0x155C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x322 PUSH2 0x505 CALLDATASIZE PUSH1 0x4 PUSH2 0x2ABF JUMP JUMPDEST PUSH2 0x16DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x525 CALLDATASIZE PUSH1 0x4 PUSH2 0x294F JUMP JUMPDEST PUSH2 0x1991 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x24832483 PUSH1 0xE1 SHL EQ DUP1 PUSH2 0x54F JUMPI POP PUSH2 0x54F DUP3 PUSH2 0x19BF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD PUSH2 0x564 SWAP1 PUSH2 0x2F60 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 0x590 SWAP1 PUSH2 0x2F60 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x5DD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5B2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x5DD 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 0x5C0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F2 DUP3 PUSH2 0x1A0F JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x619 DUP3 PUSH2 0xC5A JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x68C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76616C20746F2063757272656E74206F776E65 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x39 PUSH1 0xF9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 PUSH2 0x6A8 JUMPI POP PUSH2 0x6A8 DUP2 CALLER PUSH2 0x1991 JUMP JUMPDEST PUSH2 0x71A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76652063616C6C6572206973206E6F7420746F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6B656E206F776E6572206F7220617070726F76656420666F7220616C6C000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST PUSH2 0x724 DUP4 DUP4 PUSH2 0x1A71 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x792 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F6E6C79206974656D206F776E65722063616E207472616E7366657200000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x7F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x151BDAD95B881A5CC818DD5C9C995B9D1B1E481B1A5CDD1959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ ISZERO PUSH2 0x855 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4F6E6C792063616E207472616E73666572656420746F206F7468657273207761 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x1B1B195D PUSH1 0xE2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST PUSH2 0x860 CALLER DUP4 DUP4 PUSH2 0x1ADF JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0xE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0x8EE JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x3 DUP7 MUL SWAP1 SWAP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE PUSH1 0x1 DUP1 DUP3 ADD SLOAD DUP5 DUP7 ADD MSTORE PUSH1 0x2 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP4 MSTORE SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x899 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x904 DUP4 DUP4 DUP4 PUSH2 0x1B48 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x904 DUP4 DUP4 DUP4 PUSH2 0x1B79 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x97A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2E6E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ PUSH2 0x9E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E667420697320616C726561647920756E6C6973746564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP4 MLOAD DUP7 SWAP6 PUSH32 0x74562FF4ACA0F61B76E9B719261C3ED439529C9FBEB002C7DDFAC9193B44800C SWAP6 PUSH2 0xA57 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP6 SWAP5 AND SWAP4 SWAP1 SWAP3 PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0xFF AND SWAP1 PUSH2 0x2C56 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xA6F PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP3 DUP2 GT PUSH2 0xABF JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO PUSH2 0xAAD JUMPI DUP2 PUSH2 0xAA9 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0xAB7 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0xA76 JUMP JUMPDEST POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAE9 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB22 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0xB0F PUSH2 0x27B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xB07 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP5 DUP2 GT PUSH2 0xC50 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO PUSH2 0xC3E JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO PUSH1 0x80 DUP7 ADD MSTORE SWAP2 SWAP3 PUSH1 0xA0 DUP6 ADD SWAP3 PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xBE1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xC00 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 MSTORE POP POP DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xC24 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP2 DUP1 PUSH2 0xC3A SWAP1 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0xC48 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0xB2A JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x54F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x115490CDCC8C4E881A5B9D985B1A59081D1BDAD95B881251 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD24 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A2061646472657373207A65726F206973206E6F742061207661 PUSH1 0x44 DUP3 ADD MSTORE PUSH9 0x3634B21037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xD48 PUSH2 0x27B8 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO PUSH1 0x80 DUP7 ADD MSTORE SWAP2 SWAP3 PUSH1 0xA0 DUP6 ADD SWAP3 PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xDD6 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xDF5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x564 SWAP1 PUSH2 0x2F60 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND PUSH2 0xE6E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E206E6F742063757272656E746C79206C6973746564000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD CALLVALUE LT ISZERO PUSH2 0xECF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E742066756E64732073656E74000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x3 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH1 0x64 PUSH2 0xF01 DUP4 PUSH1 0x5 PUSH2 0x2EFE JUMP JUMPDEST PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x2EDE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF19 DUP3 DUP5 PUSH2 0x2F1D JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND OR SWAP1 SSTORE PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE SWAP1 POP PUSH2 0xF65 DUP5 CALLER DUP8 PUSH2 0x1ADF JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0xA SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xFA1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xFD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x9 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1013 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP6 SWAP1 PUSH32 0xF81C2545E78AD9DD77B3BA731AB2CFDCE225338866D32FDD91F92F1FDA49F14C SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x106A DUP6 CALLER DUP6 PUSH2 0x1B94 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x860 CALLER DUP4 DUP4 PUSH2 0x1D1C JUMP JUMPDEST PUSH1 0x0 PUSH1 0xB SLOAD PUSH2 0x108A PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST LT PUSH2 0x10D0 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 0x13999D081B585E081CDD5C1C1B1E481C995858DA1959 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x10F2 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ DUP1 PUSH2 0x111D JUMPI POP PUSH1 0x1 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x111B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x1147 JUMPI POP PUSH1 0x2 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1145 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ JUMPDEST PUSH2 0x117B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x22B93937B9 PUSH1 0xD9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH2 0x1189 PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1194 PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x11A0 CALLER DUP3 PUSH2 0x1DEB JUMP JUMPDEST PUSH2 0x11AA DUP2 DUP8 PUSH2 0x1E05 JUMP JUMPDEST PUSH2 0x11B6 DUP2 DUP7 DUP7 DUP7 PUSH2 0x1ED7 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x11CD DUP5 DUP5 DUP5 DUP5 PUSH2 0x20CC JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1266 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F6E6C79206F776E65722063616E20757064617465206C697374696E67207072 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x696365 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0xA SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1276 DUP3 PUSH2 0x1A0F JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH2 0x128F SWAP1 PUSH2 0x2F60 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 0x12BB SWAP1 PUSH2 0x2F60 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1308 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x12DD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1308 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 0x12EB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1326 PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x1339 JUMPI POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x136B JUMPI DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1353 SWAP3 SWAP2 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP3 POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x11B9 DUP5 PUSH2 0x2104 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1381 PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP3 DUP2 GT PUSH2 0x13CE JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x13BC JUMPI DUP2 PUSH2 0x13B8 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0x13C6 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1388 JUMP JUMPDEST POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13F8 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1431 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x141E PUSH2 0x27B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1416 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP5 DUP2 GT PUSH2 0xC50 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x154A JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO PUSH1 0x80 DUP7 ADD MSTORE SWAP2 SWAP3 PUSH1 0xA0 DUP6 ADD SWAP3 PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x14ED JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x150C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 MSTORE POP POP DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1530 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP2 DUP1 PUSH2 0x1546 SWAP1 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0x1554 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1439 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1595 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2E6E JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x15EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x13999D081A5CC8185B1C9958591E481B1A5CDD1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0xA SLOAD CALLVALUE EQ PUSH2 0x164C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x5072696365206D75737420626520657175616C20746F206C697374696E672070 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72696365 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x3 DUP4 ADD DUP6 SWAP1 SSTORE PUSH1 0x2 SWAP1 SWAP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP3 MLOAD DUP6 SWAP4 PUSH32 0x74562FF4ACA0F61B76E9B719261C3ED439529C9FBEB002C7DDFAC9193B44800C SWAP4 PUSH2 0x16CE SWAP4 SWAP2 SWAP3 ADDRESS SWAP3 DUP9 SWAP3 SWAP2 PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0xFF AND SWAP1 PUSH2 0x2C56 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x16E7 PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP3 DUP2 GT PUSH2 0x1796 JUMPI DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1715 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x174E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ DUP1 ISZERO PUSH2 0x1771 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x1784 JUMPI DUP2 PUSH2 0x1780 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0x178E DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0x16EE JUMP JUMPDEST POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x17C0 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x17F9 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x17E6 PUSH2 0x27B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x17DE JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP5 DUP2 GT PUSH2 0x1986 JUMPI DUP7 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1828 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1861 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ DUP1 ISZERO PUSH2 0x1884 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x1974 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO PUSH1 0x80 DUP7 ADD MSTORE SWAP2 SWAP3 PUSH1 0xA0 DUP6 ADD SWAP3 PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x1917 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1936 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 MSTORE POP POP DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x195A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP2 DUP1 PUSH2 0x1970 SWAP1 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0x197E DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1801 JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x19F0 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x54F JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ PUSH2 0x54F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1A6E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x115490CDCC8C4E881A5B9D985B1A59081D1BDAD95B881251 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SWAP1 PUSH2 0x1AA6 DUP3 PUSH2 0xC5A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1B3D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x151BDAD95B881A5CC818DD5C9C995B9D1B1E481B1A5CDD1959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH2 0x904 DUP4 DUP4 DUP4 PUSH2 0x2178 JUMP JUMPDEST PUSH2 0x1B52 CALLER DUP3 PUSH2 0x22DC JUMP JUMPDEST PUSH2 0x1B6E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2D8A JUMP JUMPDEST PUSH2 0x724 DUP4 DUP4 DUP4 PUSH2 0x1ADF JUMP JUMPDEST PUSH2 0x724 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x3 EQ ISZERO PUSH2 0x1CB4 JUMPI PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1C64 JUMPI DUP2 PUSH2 0x1BC4 DUP3 PUSH1 0x1 PUSH2 0x2EC6 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x1BE2 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x3 MUL ADD DUP3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1C10 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 DUP3 SLOAD PUSH1 0x3 SWAP1 SWAP3 MUL ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE PUSH1 0x1 DUP1 DUP4 ADD SLOAD SWAP1 DUP3 ADD SSTORE PUSH1 0x2 SWAP2 DUP3 ADD SLOAD SWAP2 ADD SSTORE DUP1 PUSH2 0x1C5C DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1BAF JUMP JUMPDEST POP DUP1 DUP1 SLOAD DUP1 PUSH2 0x1C83 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x3 PUSH1 0x0 NOT SWAP1 SWAP4 ADD SWAP3 DUP4 MUL ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 ADD SSTORE SWAP1 SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP5 DUP6 MSTORE TIMESTAMP SWAP3 DUP3 ADD SWAP3 DUP4 MSTORE DUP4 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP7 SSTORE PUSH1 0x0 SWAP6 DUP7 MSTORE SWAP2 SWAP1 SWAP5 KECCAK256 SWAP2 MLOAD PUSH1 0x3 SWAP1 SWAP5 MUL SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP3 OR DUP5 SSTORE SWAP2 MLOAD SWAP1 DUP4 ADD SSTORE MLOAD PUSH1 0x2 SWAP1 SWAP2 ADD SSTORE POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1D7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F766520746F2063616C6C657200000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x860 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x233A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E80 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524337323155524953746F726167653A2055524920736574206F66206E6F6E PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x32BC34B9BA32B73A103A37B5B2B7 PUSH1 0x91 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP3 MLOAD PUSH2 0x1E9F SWAP3 DUP5 ADD SWAP1 PUSH2 0x27EB JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xF8E1A15ABA9398E019F0B49DF1A4FDE98EE17AE345CB5F6B5E2C27F5033E8CE7 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0xA SLOAD CALLVALUE EQ PUSH2 0x1F1F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x125B98DBDC9C9958DD081C1C9A58D9481CD95B9D PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP4 GT PUSH2 0x1F6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5072696365206D7573742062652067726561746572207468616E207A65726F00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1FCD JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SSTORE SWAP1 DUP4 ADD MLOAD PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE SWAP3 DUP5 ADD MLOAD PUSH1 0x2 DUP1 DUP5 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 SWAP1 SWAP5 AND OR SWAP1 SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x3 DUP3 ADD SSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x4 DUP3 ADD DUP1 SLOAD SWAP2 ISZERO ISZERO PUSH1 0xFF NOT DUP4 AND DUP2 OR DUP3 SSTORE PUSH1 0xA0 DUP7 ADD MLOAD SWAP4 SWAP5 SWAP2 SWAP3 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0xFFFF NOT SWAP1 SWAP2 AND OR SWAP1 PUSH2 0x100 SWAP1 DUP5 SWAP1 DUP2 GT ISZERO PUSH2 0x207D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST MUL OR SWAP1 SSTORE POP SWAP1 POP POP DUP4 PUSH32 0x74562FF4ACA0F61B76E9B719261C3ED439529C9FBEB002C7DDFAC9193B44800C CALLER PUSH1 0x0 DUP7 DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x20BE SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2C56 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH2 0x20D6 CALLER DUP4 PUSH2 0x22DC JUMP JUMPDEST PUSH2 0x20F2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2D8A JUMP JUMPDEST PUSH2 0x20FE DUP5 DUP5 DUP5 DUP5 PUSH2 0x236D JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x210F DUP3 PUSH2 0x1A0F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2126 PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x2146 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x2171 JUMP JUMPDEST DUP1 PUSH2 0x2150 DUP5 PUSH2 0x23A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2161 SWAP3 SWAP2 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x218B DUP3 PUSH2 0xC5A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x21B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2E29 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2213 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2226 DUP3 PUSH2 0xC5A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x224C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2E29 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND DUP1 DUP7 MSTORE PUSH1 0x3 DUP6 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 SSTORE SWAP1 DUP8 AND DUP1 DUP7 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP7 DUP7 MSTORE PUSH1 0x2 SWAP1 SWAP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND DUP5 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD DUP5 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x22E8 DUP4 PUSH2 0xC5A JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x230F JUMPI POP PUSH2 0x230F DUP2 DUP6 PUSH2 0x1991 JUMP JUMPDEST DUP1 PUSH2 0x11B9 JUMPI POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2328 DUP5 PUSH2 0x5E7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2344 DUP4 DUP4 PUSH2 0x244B JUMP JUMPDEST PUSH2 0x2351 PUSH1 0x0 DUP5 DUP5 DUP5 PUSH2 0x25D6 JUMP JUMPDEST PUSH2 0x724 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2DD7 JUMP JUMPDEST PUSH2 0x2378 DUP5 DUP5 DUP5 PUSH2 0x1ADF JUMP JUMPDEST PUSH2 0x2384 DUP5 DUP5 DUP5 DUP5 PUSH2 0x25D6 JUMP JUMPDEST PUSH2 0x20FE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2DD7 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x23AD DUP4 PUSH2 0x26E0 JUMP JUMPDEST PUSH1 0x1 ADD SWAP1 POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x23DB JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2405 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP2 DUP2 ADD PUSH1 0x20 ADD JUMPDEST PUSH1 0x0 NOT ADD PUSH16 0x181899199A1A9B1B9C1CB0B131B232B3 PUSH1 0x81 SHL PUSH1 0xA DUP7 MOD BYTE DUP2 MSTORE8 PUSH1 0xA DUP6 DIV SWAP5 POP DUP5 PUSH2 0x243E JUMPI PUSH2 0x2443 JUMP JUMPDEST PUSH2 0x240F JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x24A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A206D696E7420746F20746865207A65726F2061646472657373 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2506 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20746F6B656E20616C7265616479206D696E74656400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x256B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20746F6B656E20616C7265616479206D696E74656400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP5 DUP4 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP5 OR SWAP1 SSTORE MLOAD DUP4 SWAP3 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 DUP3 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO PUSH2 0x26D8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0x261A SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2C94 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2634 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x2664 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x2661 SWAP2 DUP2 ADD SWAP1 PUSH2 0x2AA3 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x26BE JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x2692 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2697 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH2 0x26B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2DD7 JUMP JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ SWAP1 POP PUSH2 0x11B9 JUMP JUMPDEST POP PUSH1 0x1 PUSH2 0x11B9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 LT PUSH2 0x271F JUMPI PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 DIV SWAP3 POP PUSH1 0x40 ADD JUMPDEST PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 LT PUSH2 0x274B JUMPI PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 DIV SWAP3 POP PUSH1 0x20 ADD JUMPDEST PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0x2769 JUMPI PUSH7 0x2386F26FC10000 DUP4 DIV SWAP3 POP PUSH1 0x10 ADD JUMPDEST PUSH4 0x5F5E100 DUP4 LT PUSH2 0x2781 JUMPI PUSH4 0x5F5E100 DUP4 DIV SWAP3 POP PUSH1 0x8 ADD JUMPDEST PUSH2 0x2710 DUP4 LT PUSH2 0x2795 JUMPI PUSH2 0x2710 DUP4 DIV SWAP3 POP PUSH1 0x4 ADD JUMPDEST PUSH1 0x64 DUP4 LT PUSH2 0x27A7 JUMPI PUSH1 0x64 DUP4 DIV SWAP3 POP PUSH1 0x2 ADD JUMPDEST PUSH1 0xA DUP4 LT PUSH2 0x54F JUMPI PUSH1 0x1 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x27F7 SWAP1 PUSH2 0x2F60 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2819 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x285F JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2832 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x285F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x285F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x285F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2844 JUMP JUMPDEST POP PUSH2 0x286B SWAP3 SWAP2 POP PUSH2 0x286F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x286B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2870 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT ISZERO PUSH2 0x289F JUMPI PUSH2 0x289F PUSH2 0x2FCC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP6 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x28C7 JUMPI PUSH2 0x28C7 PUSH2 0x2FCC JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP1 SWAP4 POP DUP6 DUP2 MSTORE DUP7 DUP7 DUP7 ADD GT ISZERO PUSH2 0x28E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP8 DUP4 ADD ADD MSTORE POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x2911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2946 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2171 DUP3 PUSH2 0x28FA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2961 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x296A DUP4 PUSH2 0x28FA JUMP JUMPDEST SWAP2 POP PUSH2 0x2978 PUSH1 0x20 DUP5 ADD PUSH2 0x28FA JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2995 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x299E DUP5 PUSH2 0x28FA JUMP JUMPDEST SWAP3 POP PUSH2 0x29AC PUSH1 0x20 DUP6 ADD PUSH2 0x28FA JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x29D1 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x29DA DUP6 PUSH2 0x28FA JUMP JUMPDEST SWAP4 POP PUSH2 0x29E8 PUSH1 0x20 DUP7 ADD PUSH2 0x28FA JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A0A JUMPI DUP2 DUP3 REVERT JUMPDEST DUP6 ADD PUSH1 0x1F DUP2 ADD DUP8 SGT PUSH2 0x2A1A JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2A29 DUP8 DUP3 CALLDATALOAD PUSH1 0x20 DUP5 ADD PUSH2 0x2884 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A47 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2A50 DUP4 PUSH2 0x28FA JUMP JUMPDEST SWAP2 POP PUSH2 0x2978 PUSH1 0x20 DUP5 ADD PUSH2 0x2916 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A70 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2A79 DUP4 PUSH2 0x28FA JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A98 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2171 DUP2 PUSH2 0x2FE2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AB4 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2171 DUP2 PUSH2 0x2FE2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AD0 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2171 DUP3 PUSH2 0x2926 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2AEE JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B04 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP6 ADD PUSH1 0x1F DUP2 ADD DUP8 SGT PUSH2 0x2B14 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2B23 DUP8 DUP3 CALLDATALOAD PUSH1 0x20 DUP5 ADD PUSH2 0x2884 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH2 0x2B39 PUSH1 0x40 DUP7 ADD PUSH2 0x2926 JUMP JUMPDEST SWAP2 POP PUSH2 0x2B47 PUSH1 0x60 DUP7 ADD PUSH2 0x2916 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B63 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B7C JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2BA3 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x2F34 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x2BD5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x20 DUP6 ADD MSTORE DUP1 PUSH1 0x40 DUP5 ADD MLOAD AND PUSH1 0x40 DUP6 ADD MSTORE POP POP PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH2 0x724 PUSH1 0xA0 DUP5 ADD DUP3 PUSH2 0x2BB7 JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD PUSH2 0x2C39 DUP2 DUP5 PUSH1 0x20 DUP9 ADD PUSH2 0x2F34 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP4 ADD SWAP1 PUSH2 0x2C4D DUP2 DUP4 PUSH1 0x20 DUP9 ADD PUSH2 0x2F34 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND DUP3 MSTORE DUP6 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE DUP3 ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 ADD PUSH2 0x2C8A PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x2BB7 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2C8A SWAP1 DUP4 ADD DUP5 PUSH2 0x2B8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2D09 JUMPI PUSH2 0x2CF6 DUP4 DUP6 MLOAD PUSH2 0x2BD9 JUMP JUMPDEST SWAP3 DUP5 ADD SWAP3 PUSH1 0xC0 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2CE3 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x40 SWAP1 DUP2 DUP6 ADD SWAP1 DUP7 DUP5 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D6A JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE DUP7 DUP2 ADD MLOAD DUP8 DUP7 ADD MSTORE DUP6 ADD MLOAD DUP6 DUP6 ADD MSTORE PUSH1 0x60 SWAP1 SWAP4 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D32 JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2171 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2B8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2D SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A2063616C6C6572206973206E6F7420746F6B656E206F776E65 PUSH1 0x40 DUP3 ADD MSTORE PUSH13 0x1C881BDC88185C1C1C9BDD9959 PUSH1 0x9A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x32 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F206E6F6E204552433732315265 PUSH1 0x40 DUP3 ADD MSTORE PUSH18 0x31B2B4BB32B91034B6B83632B6B2B73A32B9 PUSH1 0x71 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E736665722066726F6D20696E636F727265637420 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x37BBB732B9 PUSH1 0xD9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x4F6E6C79206974656D206F776E65722063616E20706572666F726D2074686973 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x1037B832B930BA34B7B7 PUSH1 0xB1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD PUSH2 0x54F DUP3 DUP5 PUSH2 0x2BD9 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2ED9 JUMPI PUSH2 0x2ED9 PUSH2 0x2FB6 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2EF9 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 DUP2 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2F18 JUMPI PUSH2 0x2F18 PUSH2 0x2FB6 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2F2F JUMPI PUSH2 0x2F2F PUSH2 0x2FB6 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2F4F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2F37 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x20FE JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x2F74 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2F95 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x2FAF JUMPI PUSH2 0x2FAF PUSH2 0x2FB6 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x1A6E JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE PUSH28 0xCAAD981891FA7041A9AF96AC01C8696001B5FA6444BC0CD6DF5885F2 0x2E 0xFB PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "196:9584:16:-:0;;;430:9;403:36;;472:3;445:30;;1680:90;;;;;;;;;-1:-1:-1;1390:113:3;;;;;;;;;;;-1:-1:-1;;;1390:113:3;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1390:113:3;;;;1456:13;;1390:113;;;1456:13;;-1:-1:-1;;1456:13:3;:::i;:::-;-1:-1:-1;1479:17:3;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;1736:5:16::1;:27:::0;;-1:-1:-1;;;;;;1736:27:16::1;1752:10;1736:27;::::0;;-1:-1:-1;196:9584:16;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;196:9584:16;;;-1:-1:-1;196:9584:16;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:380:17;93:1;89:12;;;;136;;;157:2;;211:4;203:6;199:17;189:27;;157:2;264;256:6;253:14;233:18;230:38;227:2;;;310:10;305:3;301:20;298:1;291:31;345:4;342:1;335:15;373:4;370:1;363:15;227:2;;69:325;;;:::o;:::-;196:9584:16;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:23317:17",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:17",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "88:557:17",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "98:28:17",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "108:18:17",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "102:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "153:22:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "155:16:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "155:18:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "155:18:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "141:6:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "149:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "138:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "138:14:17"
                              },
                              "nodeType": "YulIf",
                              "src": "135:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "184:17:17",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "198:2:17",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "194:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "194:7:17"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "188:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "210:23:17",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "230:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "224:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "224:9:17"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "214:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "242:73:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "264:6:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "length",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "288:6:17"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "296:2:17",
                                                    "type": "",
                                                    "value": "31"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "284:3:17"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "284:15:17"
                                              },
                                              {
                                                "name": "_2",
                                                "nodeType": "YulIdentifier",
                                                "src": "301:2:17"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "280:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "280:24:17"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "306:2:17",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "276:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "276:33:17"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "311:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "272:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "272:42:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "260:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "260:55:17"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "246:10:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "374:22:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "376:16:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "376:18:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "376:18:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "333:10:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "345:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "330:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "330:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "353:10:17"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "365:6:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "350:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "350:22:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "327:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "327:46:17"
                              },
                              "nodeType": "YulIf",
                              "src": "324:2:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "412:2:17",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "416:10:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "405:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "405:22:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "405:22:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "436:15:17",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "445:6:17"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "436:5:17"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "467:6:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "475:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "460:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "460:22:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "460:22:17"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "520:16:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "529:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "532:1:17",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "522:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "522:12:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "522:12:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "501:3:17"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "506:6:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "497:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "497:16:17"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "515:3:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "494:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "494:25:17"
                              },
                              "nodeType": "YulIf",
                              "src": "491:2:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "562:6:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "570:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "558:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "558:17:17"
                                  },
                                  {
                                    "name": "src",
                                    "nodeType": "YulIdentifier",
                                    "src": "577:3:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "582:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "545:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "545:44:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "545:44:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "memPtr",
                                            "nodeType": "YulIdentifier",
                                            "src": "613:6:17"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "621:6:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "609:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "609:19:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "630:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "605:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "605:30:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "637:1:17",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "598:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "598:41:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "598:41:17"
                            }
                          ]
                        },
                        "name": "abi_decode_available_length_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "57:3:17",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "62:6:17",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "70:3:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "78:5:17",
                            "type": ""
                          }
                        ],
                        "src": "14:631:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "699:124:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "709:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "731:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "718:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "718:20:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "709:5:17"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "801:16:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "810:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "813:1:17",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "803:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "803:12:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "803:12:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "760:5:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "771:5:17"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "786:3:17",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "791:1:17",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "782:3:17"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "782:11:17"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "795:1:17",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "778:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "778:19:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "767:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "767:31:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "757:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "757:42:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "750:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "750:50:17"
                              },
                              "nodeType": "YulIf",
                              "src": "747:2:17"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "678:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "689:5:17",
                            "type": ""
                          }
                        ],
                        "src": "650:173:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "874:114:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "884:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "906:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "893:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "893:20:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "884:5:17"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "966:16:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "975:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "978:1:17",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "968:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "968:12:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "968:12:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "935:5:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "956:5:17"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "949:6:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "949:13:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "942:6:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "942:21:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "932:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "932:32:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "925:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "925:40:17"
                              },
                              "nodeType": "YulIf",
                              "src": "922:2:17"
                            }
                          ]
                        },
                        "name": "abi_decode_bool",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "853:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "864:5:17",
                            "type": ""
                          }
                        ],
                        "src": "828:160:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1050:94:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1060:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1082:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1069:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1069:20:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "1060:5:17"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1122:16:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1131:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1134:1:17",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1124:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1124:12:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1124:12:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1111:5:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1118:1:17",
                                        "type": "",
                                        "value": "3"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1108:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1108:12:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1101:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1101:20:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1098:2:17"
                            }
                          ]
                        },
                        "name": "abi_decode_enum_Collection",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1029:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1040:5:17",
                            "type": ""
                          }
                        ],
                        "src": "993:151:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1219:126:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1265:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1274:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1282:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1267:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1267:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1267:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1240:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1249:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1236:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1236:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1261:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1232:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1232:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1229:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1300:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1329:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1310:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1310:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1300:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1185:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1196:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1208:6:17",
                            "type": ""
                          }
                        ],
                        "src": "1149:196:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1437:183:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1483:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1492:6:17"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1500:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1485:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1485:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1485:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1458:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1467:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1454:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1454:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1479:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1450:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1450:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1447:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1518:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1547:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1528:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1528:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1518:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1566:48:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1599:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1610:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1595:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1595:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1576:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1576:38:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1566:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1395:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1406:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1418:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1426:6:17",
                            "type": ""
                          }
                        ],
                        "src": "1350:270:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1729:234:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1775:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1784:6:17"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1792:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1777:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1777:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1777:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1750:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1759:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1746:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1746:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1771:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1742:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1742:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "1739:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1810:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1839:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1820:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1820:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1810:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1858:48:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1891:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1902:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1887:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1887:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1868:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1868:38:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1858:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1915:42:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1942:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1953:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1938:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1938:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1925:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1925:32:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1915:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1679:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1690:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1702:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1710:6:17",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1718:6:17",
                            "type": ""
                          }
                        ],
                        "src": "1625:338:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2098:566:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2145:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2154:6:17"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2162:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2147:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2147:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2147:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2119:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2128:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2115:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2115:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2140:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2111:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2111:33:17"
                              },
                              "nodeType": "YulIf",
                              "src": "2108:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2180:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2209:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2190:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2190:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2180:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2228:48:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2261:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2272:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2257:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2257:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2238:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2238:38:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2228:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2285:42:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2312:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2323:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2308:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2308:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2295:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2295:32:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2285:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2336:46:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2367:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2378:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2363:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2363:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2350:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2350:32:17"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2340:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2425:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2434:6:17"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2442:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2427:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2427:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2427:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2397:6:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2405:18:17",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2394:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2394:30:17"
                              },
                              "nodeType": "YulIf",
                              "src": "2391:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2460:32:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2474:9:17"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2485:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2470:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2470:22:17"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2464:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2540:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2549:6:17"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2557:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2542:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2542:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2542:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2519:2:17"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2523:4:17",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2515:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2515:13:17"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2530:7:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2511:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2511:27:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2504:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2504:35:17"
                              },
                              "nodeType": "YulIf",
                              "src": "2501:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2575:83:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2623:2:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2627:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2619:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2619:11:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2645:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "2632:12:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2632:16:17"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2650:7:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_available_length_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "2585:33:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2585:73:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "2575:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2040:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2051:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2063:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2071:6:17",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2079:6:17",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2087:6:17",
                            "type": ""
                          }
                        ],
                        "src": "1968:696:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2753:180:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2799:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2808:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2816:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2801:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2801:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2801:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2774:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2783:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2770:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2770:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2795:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2766:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2766:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "2763:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2834:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2863:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2844:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2844:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2834:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2882:45:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2912:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2923:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2908:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2908:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool",
                                  "nodeType": "YulIdentifier",
                                  "src": "2892:15:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2892:35:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2882:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_bool",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2711:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2722:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2734:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2742:6:17",
                            "type": ""
                          }
                        ],
                        "src": "2669:264:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3025:177:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3071:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3080:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3088:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3073:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3073:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3073:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3046:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3055:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3042:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3042:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3067:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3038:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3038:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "3035:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3106:39:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3135:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3116:18:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3116:29:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3106:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3154:42:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3181:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3192:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3177:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3177:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3164:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3164:32:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3154:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2983:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2994:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3006:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3014:6:17",
                            "type": ""
                          }
                        ],
                        "src": "2938:264:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3276:186:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3322:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3331:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3339:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3324:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3324:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3324:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3297:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3306:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3293:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3293:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3318:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3289:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3289:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "3286:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3357:36:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3383:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3370:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3370:23:17"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3361:5:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3426:5:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_bytes4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3402:23:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3402:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3402:30:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3441:15:17",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3451:5:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3441:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes4",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3242:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3253:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3265:6:17",
                            "type": ""
                          }
                        ],
                        "src": "3207:255:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3547:179:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3593:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3602:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3610:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3595:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3595:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3595:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3568:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3577:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3564:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3564:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3589:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3560:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3560:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "3557:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3628:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3647:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3641:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3641:16:17"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3632:5:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3690:5:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_bytes4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3666:23:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3666:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3666:30:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3705:15:17",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3715:5:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3705:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes4_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3513:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3524:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3536:6:17",
                            "type": ""
                          }
                        ],
                        "src": "3467:259:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3816:134:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3862:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3871:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3879:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3864:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3864:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3864:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3837:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3846:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3833:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3833:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3858:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3829:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3829:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "3826:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3897:47:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3934:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_enum_Collection",
                                  "nodeType": "YulIdentifier",
                                  "src": "3907:26:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3907:37:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3897:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_enum$_Collection_$2971",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3782:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3793:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3805:6:17",
                            "type": ""
                          }
                        ],
                        "src": "3731:219:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4098:575:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4145:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4154:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4162:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4147:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4147:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4147:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4119:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4128:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4115:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4115:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4140:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4111:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4111:33:17"
                              },
                              "nodeType": "YulIf",
                              "src": "4108:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4180:37:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4207:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4194:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4194:23:17"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "4184:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4260:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4269:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4277:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4262:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4262:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4262:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "4232:6:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4240:18:17",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4229:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4229:30:17"
                              },
                              "nodeType": "YulIf",
                              "src": "4226:2:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4295:32:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4309:9:17"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "4320:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4305:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4305:22:17"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4299:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4375:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4384:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4392:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4377:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4377:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4377:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "4354:2:17"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4358:4:17",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "4350:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4350:13:17"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4365:7:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4346:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4346:27:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "4339:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4339:35:17"
                              },
                              "nodeType": "YulIf",
                              "src": "4336:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4410:85:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4458:2:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4462:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4454:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4454:13:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4482:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "4469:12:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4469:16:17"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4487:7:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_available_length_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "4420:33:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4420:75:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4410:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4504:44:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4531:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4542:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4527:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4527:20:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4514:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4514:34:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4504:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4557:56:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4598:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4609:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4594:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4594:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_enum_Collection",
                                  "nodeType": "YulIdentifier",
                                  "src": "4567:26:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4567:46:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4557:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4622:45:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4652:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4663:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4648:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4648:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool",
                                  "nodeType": "YulIdentifier",
                                  "src": "4632:15:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4632:35:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "4622:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptrt_uint256t_enum$_Collection_$2971t_bool",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4040:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4051:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4063:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4071:6:17",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4079:6:17",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4087:6:17",
                            "type": ""
                          }
                        ],
                        "src": "3955:718:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4748:120:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4794:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4803:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4811:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4796:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4796:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4796:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4769:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4778:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4765:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4765:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4790:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4761:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4761:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "4758:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4829:33:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4852:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4839:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4839:23:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4829:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4714:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4725:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4737:6:17",
                            "type": ""
                          }
                        ],
                        "src": "4678:190:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4960:171:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5006:26:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5015:6:17"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5023:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5008:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5008:22:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5008:22:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4981:7:17"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4990:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4977:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4977:23:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5002:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4973:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4973:32:17"
                              },
                              "nodeType": "YulIf",
                              "src": "4970:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5041:33:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5064:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5051:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5051:23:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5041:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5083:42:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5110:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5121:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5106:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5106:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5093:12:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5093:32:17"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5083:6:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4918:9:17",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4929:7:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4941:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4949:6:17",
                            "type": ""
                          }
                        ],
                        "src": "4873:258:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5185:208:17",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5195:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5215:5:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5209:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5209:12:17"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "5199:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5237:3:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5242:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5230:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5230:19:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5230:19:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5284:5:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5291:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5280:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5280:16:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5302:3:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5307:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5298:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5298:14:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5314:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5258:21:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5258:63:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5258:63:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5330:57:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5345:3:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "5358:6:17"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5366:2:17",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "5354:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5354:15:17"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5375:2:17",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "5371:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5371:7:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "5350:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5350:29:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5341:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5341:39:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5382:4:17",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5337:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5337:50:17"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "5330:3:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5162:5:17",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "5169:3:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "5177:3:17",
                            "type": ""
                          }
                        ],
                        "src": "5136:257:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5450:186:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5492:111:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5513:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5520:3:17",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5525:10:17",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "5516:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5516:20:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5506:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5506:31:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5506:31:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5557:1:17",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5560:4:17",
                                          "type": "",
                                          "value": "0x21"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5550:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5550:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5550:15:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5585:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5588:4:17",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5578:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5578:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5578:15:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5473:5:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5480:1:17",
                                        "type": "",
                                        "value": "3"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5470:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5470:12:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5463:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5463:20:17"
                              },
                              "nodeType": "YulIf",
                              "src": "5460:2:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5619:3:17"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5624:5:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5612:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5612:18:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5612:18:17"
                            }
                          ]
                        },
                        "name": "abi_encode_enum_Collection",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5434:5:17",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "5441:3:17",
                            "type": ""
                          }
                        ],
                        "src": "5398:238:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5696:499:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5713:3:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5724:5:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "5718:5:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5718:12:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5706:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5706:25:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5706:25:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5740:43:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5770:5:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5777:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5766:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5766:16:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5760:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5760:23:17"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0",
                                  "nodeType": "YulTypedName",
                                  "src": "5744:12:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5792:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5810:3:17",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5815:1:17",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5806:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5806:11:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5819:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "5802:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5802:19:17"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5796:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5841:3:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5846:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5837:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5837:14:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "memberValue0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5857:12:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5871:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5853:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5853:21:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5830:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5830:45:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5830:45:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5895:3:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5900:4:17",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5891:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5891:14:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "5921:5:17"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5928:4:17",
                                                "type": "",
                                                "value": "0x40"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "5917:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5917:16:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "5911:5:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5911:23:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5936:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5907:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5907:32:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5884:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5884:56:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5884:56:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5960:3:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5965:4:17",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5956:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5956:14:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "5982:5:17"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5989:4:17",
                                            "type": "",
                                            "value": "0x60"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "5978:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5978:16:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "5972:5:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5972:23:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5949:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5949:47:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5949:47:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6016:3:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6021:4:17",
                                        "type": "",
                                        "value": "0x80"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6012:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6012:14:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "value",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "6052:5:17"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "6059:4:17",
                                                    "type": "",
                                                    "value": "0x80"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6048:3:17"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "6048:16:17"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nodeType": "YulIdentifier",
                                              "src": "6042:5:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6042:23:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "6035:6:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6035:31:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "6028:6:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6028:39:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6005:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6005:63:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6005:63:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6077:45:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "6109:5:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6116:4:17",
                                        "type": "",
                                        "value": "0xa0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6105:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6105:16:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6099:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6099:23:17"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6081:14:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6158:14:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6178:3:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6183:4:17",
                                        "type": "",
                                        "value": "0xa0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6174:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6174:14:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_enum_Collection",
                                  "nodeType": "YulIdentifier",
                                  "src": "6131:26:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6131:58:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6131:58:17"
                            }
                          ]
                        },
                        "name": "abi_encode_struct_ListedToken",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5680:5:17",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "5687:3:17",
                            "type": ""
                          }
                        ],
                        "src": "5641:554:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6387:283:17",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6397:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6417:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6411:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6411:13:17"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6401:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6459:6:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6467:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6455:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6455:17:17"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6474:3:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6479:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6433:21:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6433:53:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6433:53:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6495:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6512:3:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6517:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6508:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6508:16:17"
                              },
                              "variables": [
                                {
                                  "name": "end_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6499:5:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6533:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6555:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6549:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6549:13:17"
                              },
                              "variables": [
                                {
                                  "name": "length_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6537:8:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6597:6:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6605:4:17",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6593:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6593:17:17"
                                  },
                                  {
                                    "name": "end_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6612:5:17"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6619:8:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6571:21:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6571:57:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6571:57:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6637:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "end_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6648:5:17"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6655:8:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6644:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6644:20:17"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "6637:3:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "6355:3:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6360:6:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6368:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "6379:3:17",
                            "type": ""
                          }
                        ],
                        "src": "6200:470:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6776:102:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6786:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6798:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6809:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6794:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6794:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6786:4:17"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6828:9:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6843:6:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6859:3:17",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6864:1:17",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "6855:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6855:11:17"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6868:1:17",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "6851:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6851:19:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6839:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6839:32:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6821:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6821:51:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6821:51:17"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6745:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6756:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6767:4:17",
                            "type": ""
                          }
                        ],
                        "src": "6675:203:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7000:102:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7010:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7022:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7033:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7018:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7018:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7010:4:17"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7052:9:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7067:6:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7083:3:17",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7088:1:17",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "7079:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7079:11:17"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7092:1:17",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "7075:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7075:19:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7063:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7063:32:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7045:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7045:51:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7045:51:17"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6969:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6980:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6991:4:17",
                            "type": ""
                          }
                        ],
                        "src": "6883:219:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7343:342:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7353:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7365:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7376:3:17",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7361:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7361:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7353:4:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7389:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7407:3:17",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7412:1:17",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7403:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7403:11:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7416:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "7399:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7399:19:17"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7393:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7434:9:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7449:6:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7457:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7445:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7445:15:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7427:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7427:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7427:34:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7481:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7492:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7477:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7477:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7501:6:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7509:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7497:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7497:15:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7470:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7470:43:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7470:43:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7533:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7544:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7529:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7529:18:17"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7549:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7522:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7522:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7522:34:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7576:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7587:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7572:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7572:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value3",
                                            "nodeType": "YulIdentifier",
                                            "src": "7606:6:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "7599:6:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7599:14:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "7592:6:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7592:22:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7565:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7565:50:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7565:50:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "7651:6:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7663:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7674:3:17",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7659:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7659:19:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_enum_Collection",
                                  "nodeType": "YulIdentifier",
                                  "src": "7624:26:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7624:55:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7624:55:17"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_payable_t_address_payable_t_uint256_t_bool_t_enum$_Collection_$2971__to_t_address_t_address_t_uint256_t_bool_t_uint8__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7280:9:17",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "7291:6:17",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "7299:6:17",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7307:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7315:6:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7323:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7334:4:17",
                            "type": ""
                          }
                        ],
                        "src": "7107:578:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7855:218:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7865:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7877:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7888:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7873:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7873:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7865:4:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7900:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7918:3:17",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7923:1:17",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7914:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7914:11:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7927:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "7910:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7910:19:17"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7904:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7945:9:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7960:6:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7968:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7956:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7956:15:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7938:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7938:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7938:34:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7992:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8003:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7988:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7988:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8012:6:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8020:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8008:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8008:15:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7981:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7981:43:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7981:43:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8044:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8055:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8040:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8040:18:17"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8060:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8033:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8033:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8033:34:17"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7808:9:17",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7819:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7827:6:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7835:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7846:4:17",
                            "type": ""
                          }
                        ],
                        "src": "7690:383:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8298:342:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8308:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8320:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8331:3:17",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8316:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8316:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8308:4:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8344:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8362:3:17",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8367:1:17",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8358:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8358:11:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8371:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "8354:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8354:19:17"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8348:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8389:9:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8404:6:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8412:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8400:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8400:15:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8382:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8382:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8382:34:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8436:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8447:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8432:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8432:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8456:6:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8464:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8452:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8452:15:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8425:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8425:43:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8425:43:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8488:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8499:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8484:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8484:18:17"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8504:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8477:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8477:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8477:34:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8531:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8542:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8527:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8527:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value3",
                                            "nodeType": "YulIdentifier",
                                            "src": "8561:6:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "8554:6:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8554:14:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "8547:6:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8547:22:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8520:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8520:50:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8520:50:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "8606:6:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8618:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8629:3:17",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8614:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8614:19:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_enum_Collection",
                                  "nodeType": "YulIdentifier",
                                  "src": "8579:26:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8579:55:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8579:55:17"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bool_t_enum$_Collection_$2971__to_t_address_t_address_t_uint256_t_bool_t_uint8__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8235:9:17",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "8246:6:17",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "8254:6:17",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8262:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8270:6:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8278:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8289:4:17",
                            "type": ""
                          }
                        ],
                        "src": "8078:562:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8848:285:17",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8858:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8876:3:17",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8881:1:17",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8872:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8872:11:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8885:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "8868:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8868:19:17"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8862:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8903:9:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8918:6:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8926:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8914:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8914:15:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8896:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8896:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8896:34:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8950:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8961:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8946:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8946:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8970:6:17"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8978:2:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8966:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8966:15:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8939:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8939:43:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8939:43:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9002:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9013:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8998:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8998:18:17"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9018:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8991:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8991:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8991:34:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9045:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9056:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9041:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9041:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9061:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9034:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9034:31:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9034:31:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9074:53:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "9099:6:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9111:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9122:3:17",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9107:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9107:19:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "9082:16:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9082:45:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9074:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8793:9:17",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "8804:6:17",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8812:6:17",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8820:6:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8828:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8839:4:17",
                            "type": ""
                          }
                        ],
                        "src": "8645:488:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9347:509:17",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9357:12:17",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9367:2:17",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9361:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9378:32:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9396:9:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9407:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9392:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9392:18:17"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9382:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9426:9:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9437:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9419:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9419:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9419:21:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9449:17:17",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "9460:6:17"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "9453:3:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9475:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9495:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9489:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9489:13:17"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "9479:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9518:6:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9526:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9511:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9511:22:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9511:22:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9542:25:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9553:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9564:2:17",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9549:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9549:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "9542:3:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9576:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9594:6:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9602:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9590:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9590:15:17"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "9580:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9614:13:17",
                              "value": {
                                "name": "tail",
                                "nodeType": "YulIdentifier",
                                "src": "9623:4:17"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "9618:1:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9685:145:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "srcPtr",
                                              "nodeType": "YulIdentifier",
                                              "src": "9735:6:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "9729:5:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "9729:13:17"
                                        },
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "9744:3:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "abi_encode_struct_ListedToken",
                                        "nodeType": "YulIdentifier",
                                        "src": "9699:29:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9699:49:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9699:49:17"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9761:21:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "9772:3:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9777:4:17",
                                          "type": "",
                                          "value": "0xc0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9768:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9768:14:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "9761:3:17"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9795:25:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "9809:6:17"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9817:2:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9805:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9805:15:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "9795:6:17"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "9647:1:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9650:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9644:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9644:13:17"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "9658:18:17",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9660:14:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "9669:1:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9672:1:17",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9665:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9665:9:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "9660:1:17"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "9640:3:17",
                                "statements": []
                              },
                              "src": "9636:194:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9839:11:17",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "9847:3:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9839:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9316:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9327:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9338:4:17",
                            "type": ""
                          }
                        ],
                        "src": "9138:718:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10072:671:17",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10082:12:17",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10092:2:17",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10086:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10103:32:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10121:9:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10132:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10117:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10117:18:17"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10107:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10151:9:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10162:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10144:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10144:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10144:21:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10174:17:17",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "10185:6:17"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "10178:3:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10200:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10220:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10214:5:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10214:13:17"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "10204:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10243:6:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10251:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10236:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10236:22:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10236:22:17"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10267:12:17",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10277:2:17",
                                "type": "",
                                "value": "64"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "10271:2:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10288:25:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10299:9:17"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "10310:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10295:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10295:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "10288:3:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10322:29:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10340:6:17"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10348:2:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10336:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10336:15:17"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "10326:6:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10360:13:17",
                              "value": {
                                "name": "tail",
                                "nodeType": "YulIdentifier",
                                "src": "10369:4:17"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "10364:1:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10431:286:17",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "10445:23:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "10461:6:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "10455:5:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10455:13:17"
                                    },
                                    "variables": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulTypedName",
                                        "src": "10449:2:17",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "10488:3:17"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "_3",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "10503:2:17"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "10497:5:17"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "10497:9:17"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "10516:3:17",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "10521:1:17",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "10512:3:17"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "10512:11:17"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "10525:1:17",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "10508:3:17"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "10508:19:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "10493:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10493:35:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10481:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10481:48:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10481:48:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "pos",
                                              "nodeType": "YulIdentifier",
                                              "src": "10553:3:17"
                                            },
                                            {
                                              "name": "_1",
                                              "nodeType": "YulIdentifier",
                                              "src": "10558:2:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "10549:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10549:12:17"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "_3",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "10573:2:17"
                                                },
                                                {
                                                  "name": "_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "10577:2:17"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "10569:3:17"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "10569:11:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "10563:5:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10563:18:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10542:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10542:40:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10542:40:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "pos",
                                              "nodeType": "YulIdentifier",
                                              "src": "10606:3:17"
                                            },
                                            {
                                              "name": "_2",
                                              "nodeType": "YulIdentifier",
                                              "src": "10611:2:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "10602:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10602:12:17"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "_3",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "10626:2:17"
                                                },
                                                {
                                                  "name": "_2",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "10630:2:17"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "10622:3:17"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "10622:11:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "10616:5:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10616:18:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10595:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10595:40:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10595:40:17"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10648:21:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "10659:3:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10664:4:17",
                                          "type": "",
                                          "value": "0x60"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10655:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10655:14:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "10648:3:17"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10682:25:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "10696:6:17"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "10704:2:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10692:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10692:15:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "10682:6:17"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "10393:1:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10396:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10390:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10390:13:17"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "10404:18:17",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10406:14:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "10415:1:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10418:1:17",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10411:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10411:9:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "10406:1:17"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "10386:3:17",
                                "statements": []
                              },
                              "src": "10382:335:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10726:11:17",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "10734:3:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10726:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_struct$_TokenHistory_$2992_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_TokenHistory_$2992_memory_ptr_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10041:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10052:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10063:4:17",
                            "type": ""
                          }
                        ],
                        "src": "9861:882:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10843:92:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10853:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10865:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10876:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10861:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10861:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10853:4:17"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10895:9:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "10920:6:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "10913:6:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10913:14:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "10906:6:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10906:22:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10888:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10888:41:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10888:41:17"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10812:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10823:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10834:4:17",
                            "type": ""
                          }
                        ],
                        "src": "10748:187:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11061:98:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11078:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11089:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11071:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11071:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11071:21:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11101:52:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "11126:6:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11138:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11149:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11134:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11134:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "11109:16:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11109:44:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11101:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11030:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11041:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11052:4:17",
                            "type": ""
                          }
                        ],
                        "src": "10940:219:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11338:235:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11355:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11366:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11348:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11348:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11348:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11389:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11400:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11385:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11385:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11405:2:17",
                                    "type": "",
                                    "value": "45"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11378:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11378:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11378:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11428:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11439:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11424:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11424:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "11444:34:17",
                                    "type": "",
                                    "value": "ERC721: caller is not token owne"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11417:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11417:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11417:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11499:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11510:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11495:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11495:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "11515:15:17",
                                    "type": "",
                                    "value": "r or approved"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11488:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11488:43:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11488:43:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11540:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11552:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11563:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11548:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11548:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11540:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11315:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11329:4:17",
                            "type": ""
                          }
                        ],
                        "src": "11164:409:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11752:181:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11769:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11780:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11762:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11762:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11762:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11803:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11814:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11799:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11799:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11819:2:17",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11792:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11792:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11792:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11842:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11853:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11838:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11838:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "11858:33:17",
                                    "type": "",
                                    "value": "Price must be greater than zero"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11831:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11831:61:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11831:61:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11901:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11913:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11924:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11909:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11909:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11901:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_1e47b80dba3e3bff087af44930a3e1a0b5fb80034194db87f9ae87a93f0935b0__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11729:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11743:4:17",
                            "type": ""
                          }
                        ],
                        "src": "11578:355:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12112:240:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12129:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12140:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12122:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12122:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12122:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12163:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12174:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12159:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12159:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12179:2:17",
                                    "type": "",
                                    "value": "50"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12152:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12152:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12152:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12202:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12213:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12198:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12198:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "12218:34:17",
                                    "type": "",
                                    "value": "ERC721: transfer to non ERC721Re"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12191:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12191:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12191:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12273:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12284:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12269:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12269:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "12289:20:17",
                                    "type": "",
                                    "value": "ceiver implementer"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12262:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12262:48:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12262:48:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12319:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12331:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12342:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12327:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12327:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12319:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12089:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12103:4:17",
                            "type": ""
                          }
                        ],
                        "src": "11938:414:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12531:227:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12548:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12559:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12541:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12541:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12541:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12582:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12593:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12578:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12578:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12598:2:17",
                                    "type": "",
                                    "value": "37"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12571:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12571:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12571:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12621:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12632:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12617:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12617:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "12637:34:17",
                                    "type": "",
                                    "value": "ERC721: transfer from incorrect "
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12610:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12610:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12610:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12692:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12703:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12688:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12688:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "12708:7:17",
                                    "type": "",
                                    "value": "owner"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12681:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12681:35:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12681:35:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12725:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12737:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12748:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12733:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12733:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12725:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12508:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12522:4:17",
                            "type": ""
                          }
                        ],
                        "src": "12357:401:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12937:178:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12954:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12965:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12947:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12947:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12947:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12988:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12999:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12984:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12984:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13004:2:17",
                                    "type": "",
                                    "value": "28"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12977:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12977:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12977:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13027:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13038:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13023:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13023:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "13043:30:17",
                                    "type": "",
                                    "value": "ERC721: token already minted"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13016:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13016:58:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13016:58:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13083:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13095:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13106:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13091:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13091:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "13083:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12914:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12928:4:17",
                            "type": ""
                          }
                        ],
                        "src": "12763:352:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13294:226:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13311:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13322:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13304:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13304:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13304:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13345:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13356:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13341:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13341:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13361:2:17",
                                    "type": "",
                                    "value": "36"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13334:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13334:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13334:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13384:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13395:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13380:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13380:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "13400:34:17",
                                    "type": "",
                                    "value": "ERC721: transfer to the zero add"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13373:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13373:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13373:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13455:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13466:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13451:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13451:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "13471:6:17",
                                    "type": "",
                                    "value": "ress"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13444:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13444:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13444:34:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13487:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13499:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13510:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13495:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13495:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "13487:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13271:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "13285:4:17",
                            "type": ""
                          }
                        ],
                        "src": "13120:400:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13699:175:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13716:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13727:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13709:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13709:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13709:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13750:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13761:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13746:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13746:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13766:2:17",
                                    "type": "",
                                    "value": "25"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13739:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13739:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13739:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13789:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13800:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13785:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13785:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "13805:27:17",
                                    "type": "",
                                    "value": "ERC721: approve to caller"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13778:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13778:55:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13778:55:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13842:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13854:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13865:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13850:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13850:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "13842:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13676:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "13690:4:17",
                            "type": ""
                          }
                        ],
                        "src": "13525:349:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14053:170:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14070:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14081:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14063:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14063:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14063:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "14104:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14115:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "14100:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14100:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14120:2:17",
                                    "type": "",
                                    "value": "20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14093:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14093:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14093:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "14143:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14154:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "14139:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14139:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "14159:22:17",
                                    "type": "",
                                    "value": "Incorrect price sent"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14132:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14132:50:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14132:50:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14191:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14203:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14214:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14199:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14199:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "14191:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_4c013029acf3765d65c07426aa8030ce4ed3b6cf11b5f537810fc71889656e4e__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14030:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "14044:4:17",
                            "type": ""
                          }
                        ],
                        "src": "13879:344:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14402:173:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14419:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14430:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14412:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14412:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14412:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "14453:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14464:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "14449:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14449:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14469:2:17",
                                    "type": "",
                                    "value": "23"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14442:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14442:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14442:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "14492:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14503:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "14488:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14488:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "14508:25:17",
                                    "type": "",
                                    "value": "Nft is already unlisted"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14481:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14481:53:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14481:53:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14543:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14555:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14566:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14551:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14551:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "14543:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_4d501a687ef5586dfea283dab8d120f7affd74ec80de3d272e6d2fe8fcc0930b__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14379:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "14393:4:17",
                            "type": ""
                          }
                        ],
                        "src": "14228:347:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14754:175:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14771:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14782:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14764:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14764:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14764:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "14805:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14816:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "14801:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14801:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14821:2:17",
                                    "type": "",
                                    "value": "25"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14794:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14794:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14794:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "14844:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14855:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "14840:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14840:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "14860:27:17",
                                    "type": "",
                                    "value": "Token is currently listed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14833:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14833:55:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14833:55:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14897:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14909:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14920:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14905:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14905:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "14897:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_550a7aee525cdb37d467337d41c46aeb640864cb4ae546c986b5f99592f870ea__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14731:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "14745:4:17",
                            "type": ""
                          }
                        ],
                        "src": "14580:349:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15108:225:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "15125:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15136:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15118:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15118:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15118:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15159:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15170:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15155:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15155:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15175:2:17",
                                    "type": "",
                                    "value": "35"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15148:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15148:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15148:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15198:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15209:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15194:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15194:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "15214:34:17",
                                    "type": "",
                                    "value": "Only owner can update listing pr"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15187:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15187:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15187:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15269:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15280:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15265:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15265:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "15285:5:17",
                                    "type": "",
                                    "value": "ice"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15258:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15258:33:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15258:33:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15300:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "15312:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15323:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "15308:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15308:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "15300:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_648d899d9d80530618a37b92a123c1de3e1d6181a8da46bed2ea09f7dfc0a4d2__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "15085:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "15099:4:17",
                            "type": ""
                          }
                        ],
                        "src": "14934:399:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15512:231:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "15529:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15540:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15522:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15522:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15522:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15563:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15574:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15559:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15559:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15579:2:17",
                                    "type": "",
                                    "value": "41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15552:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15552:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15552:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15602:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15613:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15598:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15598:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "15618:34:17",
                                    "type": "",
                                    "value": "ERC721: address zero is not a va"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15591:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15591:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15591:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15673:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15684:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15669:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15669:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "15689:11:17",
                                    "type": "",
                                    "value": "lid owner"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15662:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15662:39:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15662:39:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15710:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "15722:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15733:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "15718:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15718:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "15710:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "15489:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "15503:4:17",
                            "type": ""
                          }
                        ],
                        "src": "15338:405:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15922:236:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "15939:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15950:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15932:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15932:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15932:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15973:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15984:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15969:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15969:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15989:2:17",
                                    "type": "",
                                    "value": "46"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15962:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15962:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15962:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16012:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16023:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16008:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16008:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "16028:34:17",
                                    "type": "",
                                    "value": "ERC721URIStorage: URI set of non"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16001:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16001:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16001:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16083:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16094:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16079:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16079:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "16099:16:17",
                                    "type": "",
                                    "value": "existent token"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16072:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16072:44:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16072:44:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16125:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "16137:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16148:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "16133:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16133:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "16125:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "15899:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "15913:4:17",
                            "type": ""
                          }
                        ],
                        "src": "15748:410:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16337:226:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "16354:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16365:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16347:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16347:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16347:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16388:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16399:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16384:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16384:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16404:2:17",
                                    "type": "",
                                    "value": "36"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16377:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16377:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16377:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16427:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16438:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16423:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16423:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "16443:34:17",
                                    "type": "",
                                    "value": "Only can transfered to others wa"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16416:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16416:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16416:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16498:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16509:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16494:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16494:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "16514:6:17",
                                    "type": "",
                                    "value": "llet"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16487:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16487:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16487:34:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16530:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "16542:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16553:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "16538:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16538:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "16530:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_84119526d456dcf2f6af49e086aa4eb21c7aff51b29ee8e478c8a78cf4befc97__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "16314:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "16328:4:17",
                            "type": ""
                          }
                        ],
                        "src": "16163:400:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16742:182:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "16759:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16770:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16752:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16752:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16752:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16793:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16804:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16789:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16789:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16809:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16782:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16782:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16782:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16832:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16843:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16828:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16828:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "16848:34:17",
                                    "type": "",
                                    "value": "ERC721: mint to the zero address"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16821:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16821:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16821:62:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16892:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "16904:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16915:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "16900:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16900:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "16892:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "16719:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "16733:4:17",
                            "type": ""
                          }
                        ],
                        "src": "16568:356:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17103:232:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17120:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17131:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17113:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17113:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17113:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17154:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17165:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17150:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17150:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17170:2:17",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17143:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17143:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17143:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17193:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17204:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17189:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17189:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "17209:34:17",
                                    "type": "",
                                    "value": "Only item owner can perform this"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17182:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17182:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17182:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17264:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17275:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17260:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17260:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "17280:12:17",
                                    "type": "",
                                    "value": " operation"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17253:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17253:40:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17253:40:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17302:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17314:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17325:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "17310:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17310:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "17302:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_9074ba32ca71a33be0d5bad3f82b59a588b5f08f53731795bb0723c24a23290d__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "17080:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "17094:4:17",
                            "type": ""
                          }
                        ],
                        "src": "16929:406:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17514:171:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17531:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17542:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17524:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17524:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17524:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17565:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17576:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17561:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17561:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17581:2:17",
                                    "type": "",
                                    "value": "21"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17554:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17554:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17554:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17604:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17615:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17600:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17600:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "17620:23:17",
                                    "type": "",
                                    "value": "Nft is already listed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17593:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17593:51:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17593:51:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17653:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17665:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17676:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "17661:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17661:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "17653:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_ad0c789652ea4140f68457b2e431e4064b30c112e50e6f29db9147aeb72df39e__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "17491:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "17505:4:17",
                            "type": ""
                          }
                        ],
                        "src": "17340:345:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17864:174:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17881:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17892:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17874:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17874:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17874:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17915:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17926:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17911:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17911:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17931:2:17",
                                    "type": "",
                                    "value": "24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17904:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17904:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17904:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17954:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17965:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17950:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17950:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "17970:26:17",
                                    "type": "",
                                    "value": "ERC721: invalid token ID"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17943:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17943:54:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17943:54:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18006:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "18018:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18029:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "18014:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18014:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "18006:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "17841:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "17855:4:17",
                            "type": ""
                          }
                        ],
                        "src": "17690:348:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "18217:223:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "18234:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18245:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18227:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18227:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18227:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18268:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18279:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18264:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18264:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18284:2:17",
                                    "type": "",
                                    "value": "33"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18257:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18257:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18257:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18307:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18318:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18303:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18303:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "18323:34:17",
                                    "type": "",
                                    "value": "ERC721: approval to current owne"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18296:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18296:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18296:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18378:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18389:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18374:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18374:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "18394:3:17",
                                    "type": "",
                                    "value": "r"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18367:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18367:31:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18367:31:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18407:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "18419:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18430:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "18415:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18415:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "18407:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "18194:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "18208:4:17",
                            "type": ""
                          }
                        ],
                        "src": "18043:397:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "18619:176:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "18636:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18647:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18629:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18629:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18629:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18670:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18681:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18666:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18666:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18686:2:17",
                                    "type": "",
                                    "value": "26"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18659:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18659:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18659:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18709:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18720:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18705:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18705:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "18725:28:17",
                                    "type": "",
                                    "value": "Token not currently listed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18698:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18698:56:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18698:56:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18763:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "18775:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18786:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "18771:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18771:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "18763:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_c4a3cb03a777966952a9e0ea8169bdf906c35d5703ed25d4d34802e2702cbca2__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "18596:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "18610:4:17",
                            "type": ""
                          }
                        ],
                        "src": "18445:350:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "18974:226:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "18991:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19002:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18984:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18984:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18984:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19025:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19036:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19021:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19021:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19041:2:17",
                                    "type": "",
                                    "value": "36"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "19014:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19014:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19014:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19064:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19075:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19060:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19060:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "19080:34:17",
                                    "type": "",
                                    "value": "Price must be equal to listing p"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "19053:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19053:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19053:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19135:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19146:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19131:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19131:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "19151:6:17",
                                    "type": "",
                                    "value": "rice"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "19124:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19124:34:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19124:34:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19167:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "19179:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19190:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "19175:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19175:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "19167:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_c4c9b34e8a44a82a4ba8962937a0e0f0afa9206f6a506fa182ac004768974dd1__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "18951:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "18965:4:17",
                            "type": ""
                          }
                        ],
                        "src": "18800:400:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "19379:251:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "19396:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19407:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "19389:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19389:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19389:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19430:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19441:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19426:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19426:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19446:2:17",
                                    "type": "",
                                    "value": "61"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "19419:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19419:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19419:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19469:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19480:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19465:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19465:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "19485:34:17",
                                    "type": "",
                                    "value": "ERC721: approve caller is not to"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "19458:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19458:62:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19458:62:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19540:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19551:2:17",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19536:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19536:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "19556:31:17",
                                    "type": "",
                                    "value": "ken owner or approved for all"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "19529:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19529:59:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19529:59:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19597:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "19609:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19620:3:17",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "19605:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19605:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "19597:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "19356:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "19370:4:17",
                            "type": ""
                          }
                        ],
                        "src": "19205:425:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "19809:154:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "19826:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19837:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "19819:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19819:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19819:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19860:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19871:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19856:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19856:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19876:1:17",
                                    "type": "",
                                    "value": "5"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "19849:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19849:29:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19849:29:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19898:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19909:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19894:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19894:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "19914:7:17",
                                    "type": "",
                                    "value": "Error"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "19887:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19887:35:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19887:35:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19931:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "19943:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19954:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "19939:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19939:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "19931:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_e342daa49723ff3485f4ff5f755a17b8bc9c3c33bbd312ceee37c94eebfe45c1__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "19786:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "19800:4:17",
                            "type": ""
                          }
                        ],
                        "src": "19635:328:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "20142:172:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "20159:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20170:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20152:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20152:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20152:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20193:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20204:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20189:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20189:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20209:2:17",
                                    "type": "",
                                    "value": "22"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20182:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20182:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20182:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20232:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20243:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20228:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20228:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "20248:24:17",
                                    "type": "",
                                    "value": "Nft max supply reached"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20221:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20221:52:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20221:52:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20282:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "20294:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20305:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "20290:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20290:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "20282:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_edc8fea3fbebc856e7a02453f567aef386473087acd09e17fb0f8683f0dbd60a__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "20119:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "20133:4:17",
                            "type": ""
                          }
                        ],
                        "src": "19968:346:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "20493:173:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "20510:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20521:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20503:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20503:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20503:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20544:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20555:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20540:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20540:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20560:2:17",
                                    "type": "",
                                    "value": "23"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20533:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20533:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20533:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20583:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20594:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20579:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20579:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "20599:25:17",
                                    "type": "",
                                    "value": "Insufficient funds sent"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20572:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20572:53:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20572:53:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20634:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "20646:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20657:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "20642:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20642:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "20634:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_ef04984094766165d0f3292abebb7fe2c98e15506095c629b0da789b5dea64bb__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "20470:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "20484:4:17",
                            "type": ""
                          }
                        ],
                        "src": "20319:347:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "20845:178:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "20862:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20873:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20855:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20855:21:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20855:21:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20896:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20907:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20892:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20892:18:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20912:2:17",
                                    "type": "",
                                    "value": "28"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20885:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20885:30:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20885:30:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20935:9:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20946:2:17",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20931:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20931:18:17"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "20951:30:17",
                                    "type": "",
                                    "value": "Only item owner can transfer"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20924:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20924:58:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20924:58:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20991:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "21003:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "21014:2:17",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "20999:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20999:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "20991:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_f9362b4338ee38e8d4b2edd3f052338cf486175c26ae2491afc37439b965fb19__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "20822:9:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "20836:4:17",
                            "type": ""
                          }
                        ],
                        "src": "20671:352:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21187:100:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "21197:27:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "21209:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "21220:3:17",
                                    "type": "",
                                    "value": "192"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "21205:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21205:19:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "21197:4:17"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "21263:6:17"
                                  },
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "21271:9:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_struct_ListedToken",
                                  "nodeType": "YulIdentifier",
                                  "src": "21233:29:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21233:48:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21233:48:17"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_ListedToken_$2985_memory_ptr__to_t_struct$_ListedToken_$2985_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "21156:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "21167:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "21178:4:17",
                            "type": ""
                          }
                        ],
                        "src": "21028:259:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21393:76:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "21403:26:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "21415:9:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "21426:2:17",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "21411:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21411:18:17"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "21403:4:17"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "21445:9:17"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "21456:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21438:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21438:25:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21438:25:17"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "21362:9:17",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "21373:6:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "21384:4:17",
                            "type": ""
                          }
                        ],
                        "src": "21292:177:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21522:80:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "21549:22:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "21551:16:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "21551:18:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "21551:18:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "21538:1:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "21545:1:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "21541:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21541:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "21535:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21535:13:17"
                              },
                              "nodeType": "YulIf",
                              "src": "21532:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "21580:16:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "21591:1:17"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "21594:1:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "21587:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21587:9:17"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "21580:3:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "21505:1:17",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "21508:1:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "21514:3:17",
                            "type": ""
                          }
                        ],
                        "src": "21474:128:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21653:171:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "21684:111:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "r",
                                          "nodeType": "YulIdentifier",
                                          "src": "21705:1:17"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "21712:3:17",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "21717:10:17",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "21708:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "21708:20:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "21698:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "21698:31:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "21698:31:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "21749:1:17",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "21752:4:17",
                                          "type": "",
                                          "value": "0x12"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "21742:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "21742:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "21742:15:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "r",
                                          "nodeType": "YulIdentifier",
                                          "src": "21777:1:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "21780:4:17",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "21770:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "21770:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "21770:15:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "21673:1:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "21666:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21666:9:17"
                              },
                              "nodeType": "YulIf",
                              "src": "21663:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "21804:14:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "21813:1:17"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "21816:1:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "21809:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21809:9:17"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "21804:1:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "21638:1:17",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "21641:1:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "21647:1:17",
                            "type": ""
                          }
                        ],
                        "src": "21607:217:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21881:116:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "21940:22:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "21942:16:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "21942:18:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "21942:18:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "21912:1:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "21905:6:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "21905:9:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "21898:6:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21898:17:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "21920:1:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "21931:1:17",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "21927:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "21927:6:17"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "21935:1:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "21923:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "21923:14:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "21917:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21917:21:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "21894:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21894:45:17"
                              },
                              "nodeType": "YulIf",
                              "src": "21891:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "21971:20:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "21986:1:17"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "21989:1:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "21982:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21982:9:17"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "21971:7:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "21860:1:17",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "21863:1:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "21869:7:17",
                            "type": ""
                          }
                        ],
                        "src": "21829:168:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22051:76:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "22073:22:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "22075:16:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "22075:18:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "22075:18:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "22067:1:17"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "22070:1:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "22064:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22064:8:17"
                              },
                              "nodeType": "YulIf",
                              "src": "22061:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "22104:17:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "22116:1:17"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "22119:1:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "22112:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22112:9:17"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "22104:4:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "22033:1:17",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "22036:1:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "22042:4:17",
                            "type": ""
                          }
                        ],
                        "src": "22002:125:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22185:205:17",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "22195:10:17",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "22204:1:17",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "22199:1:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "22264:63:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "22289:3:17"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "22294:1:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "22285:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "22285:11:17"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "22308:3:17"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "22313:1:17"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "22304:3:17"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "22304:11:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "22298:5:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "22298:18:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "22278:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "22278:39:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "22278:39:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "22225:1:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "22228:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "22222:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22222:13:17"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "22236:19:17",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "22238:15:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "22247:1:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "22250:2:17",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "22243:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "22243:10:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "22238:1:17"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "22218:3:17",
                                "statements": []
                              },
                              "src": "22214:113:17"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "22353:31:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "22366:3:17"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "22371:6:17"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "22362:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "22362:16:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "22380:1:17",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "22355:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "22355:27:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "22355:27:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "22342:1:17"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "22345:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "22339:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22339:13:17"
                              },
                              "nodeType": "YulIf",
                              "src": "22336:2:17"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "22163:3:17",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "22168:3:17",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "22173:6:17",
                            "type": ""
                          }
                        ],
                        "src": "22132:258:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22450:325:17",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "22460:22:17",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22474:1:17",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "22477:4:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "22470:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22470:12:17"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "22460:6:17"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "22491:38:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "22521:4:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22527:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "22517:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22517:12:17"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "22495:18:17",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "22568:31:17",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "22570:27:17",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "22584:6:17"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "22592:4:17",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "22580:3:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "22580:17:17"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "22570:6:17"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "22548:18:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "22541:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22541:26:17"
                              },
                              "nodeType": "YulIf",
                              "src": "22538:2:17"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "22658:111:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "22679:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "22686:3:17",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "22691:10:17",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "22682:3:17"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "22682:20:17"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "22672:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "22672:31:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "22672:31:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "22723:1:17",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "22726:4:17",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "22716:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "22716:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "22716:15:17"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "22751:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "22754:4:17",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "22744:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "22744:15:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "22744:15:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "22614:18:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "22637:6:17"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "22645:2:17",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "22634:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22634:14:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "22611:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22611:38:17"
                              },
                              "nodeType": "YulIf",
                              "src": "22608:2:17"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "22430:4:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "22439:6:17",
                            "type": ""
                          }
                        ],
                        "src": "22395:380:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22827:88:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "22858:22:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "22860:16:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "22860:18:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "22860:18:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "22843:5:17"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "22854:1:17",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "22850:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22850:6:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "22840:2:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22840:17:17"
                              },
                              "nodeType": "YulIf",
                              "src": "22837:2:17"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "22889:20:17",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "22900:5:17"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22907:1:17",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "22896:3:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22896:13:17"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "22889:3:17"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "increment_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "22809:5:17",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "22819:3:17",
                            "type": ""
                          }
                        ],
                        "src": "22780:135:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22952:95:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22969:1:17",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "22976:3:17",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "22981:10:17",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "22972:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22972:20:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "22962:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22962:31:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "22962:31:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23009:1:17",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23012:4:17",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23002:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23002:15:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23002:15:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23033:1:17",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23036:4:17",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "23026:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23026:15:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23026:15:17"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "22920:127:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "23084:95:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23101:1:17",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23108:3:17",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23113:10:17",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "23104:3:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23104:20:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23094:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23094:31:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23094:31:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23141:1:17",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23144:4:17",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23134:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23134:15:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23134:15:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23165:1:17",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23168:4:17",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "23158:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23158:15:17"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23158:15:17"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "23052:127:17"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "23228:87:17",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "23293:16:17",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "23302:1:17",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "23305:1:17",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "23295:6:17"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "23295:12:17"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "23295:12:17"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "23251:5:17"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "23262:5:17"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "23273:3:17",
                                                "type": "",
                                                "value": "224"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "23278:10:17",
                                                "type": "",
                                                "value": "0xffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "23269:3:17"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "23269:20:17"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "23258:3:17"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "23258:32:17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "23248:2:17"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23248:43:17"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "23241:6:17"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23241:51:17"
                              },
                              "nodeType": "YulIf",
                              "src": "23238:2:17"
                            }
                          ]
                        },
                        "name": "validator_revert_bytes4",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "23217:5:17",
                            "type": ""
                          }
                        ],
                        "src": "23184:131:17"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_available_length_bytes(src, length, end) -> array\n    {\n        let _1 := 0xffffffffffffffff\n        if gt(length, _1) { panic_error_0x41() }\n        let _2 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(length, 31), _2), 63), _2))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        array := memPtr\n        mstore(memPtr, length)\n        if gt(add(src, length), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), src, length)\n        mstore(add(add(memPtr, length), 0x20), 0)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_enum_Collection(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(lt(value, 3)) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value1, value1) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value3, value3) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        if gt(offset, 0xffffffffffffffff) { revert(value3, value3) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value3, value3) }\n        value3 := abi_decode_available_length_bytes(add(_1, 32), calldataload(_1), dataEnd)\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_bool(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_bytes4(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := mload(headStart)\n        validator_revert_bytes4(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_enum$_Collection_$2971(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_enum_Collection(headStart)\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_uint256t_enum$_Collection_$2971t_bool(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value0, value0) }\n        value0 := abi_decode_available_length_bytes(add(_1, 0x20), calldataload(_1), dataEnd)\n        value1 := calldataload(add(headStart, 0x20))\n        value2 := abi_decode_enum_Collection(add(headStart, 64))\n        value3 := abi_decode_bool(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_enum_Collection(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_struct_ListedToken(value, pos)\n    {\n        mstore(pos, mload(value))\n        let memberValue0 := mload(add(value, 0x20))\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(pos, 0x20), and(memberValue0, _1))\n        mstore(add(pos, 0x40), and(mload(add(value, 0x40)), _1))\n        mstore(add(pos, 0x60), mload(add(value, 0x60)))\n        mstore(add(pos, 0x80), iszero(iszero(mload(add(value, 0x80)))))\n        let memberValue0_1 := mload(add(value, 0xa0))\n        abi_encode_enum_Collection(memberValue0_1, add(pos, 0xa0))\n    }\n    function abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        let end_1 := add(pos, length)\n        let length_1 := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), end_1, length_1)\n        end := add(end_1, length_1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_payable_t_address_payable_t_uint256_t_bool_t_enum$_Collection_$2971__to_t_address_t_address_t_uint256_t_bool_t_uint8__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), iszero(iszero(value3)))\n        abi_encode_enum_Collection(value4, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_address_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_bool_t_enum$_Collection_$2971__to_t_address_t_address_t_uint256_t_bool_t_uint8__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), iszero(iszero(value3)))\n        abi_encode_enum_Collection(value4, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := tail\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            abi_encode_struct_ListedToken(mload(srcPtr), pos)\n            pos := add(pos, 0xc0)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_array$_t_struct$_TokenHistory_$2992_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_TokenHistory_$2992_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        let _2 := 64\n        pos := add(headStart, _2)\n        let srcPtr := add(value0, _1)\n        let i := tail\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            let _3 := mload(srcPtr)\n            mstore(pos, and(mload(_3), sub(shl(160, 1), 1)))\n            mstore(add(pos, _1), mload(add(_3, _1)))\n            mstore(add(pos, _2), mload(add(_3, _2)))\n            pos := add(pos, 0x60)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\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_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 45)\n        mstore(add(headStart, 64), \"ERC721: caller is not token owne\")\n        mstore(add(headStart, 96), \"r or approved\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_1e47b80dba3e3bff087af44930a3e1a0b5fb80034194db87f9ae87a93f0935b0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Price must be greater than zero\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"ERC721: transfer to non ERC721Re\")\n        mstore(add(headStart, 96), \"ceiver implementer\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC721: transfer from incorrect \")\n        mstore(add(headStart, 96), \"owner\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"ERC721: token already minted\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC721: transfer to the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"ERC721: approve to caller\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4c013029acf3765d65c07426aa8030ce4ed3b6cf11b5f537810fc71889656e4e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Incorrect price sent\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4d501a687ef5586dfea283dab8d120f7affd74ec80de3d272e6d2fe8fcc0930b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"Nft is already unlisted\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_550a7aee525cdb37d467337d41c46aeb640864cb4ae546c986b5f99592f870ea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"Token is currently listed\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_648d899d9d80530618a37b92a123c1de3e1d6181a8da46bed2ea09f7dfc0a4d2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"Only owner can update listing pr\")\n        mstore(add(headStart, 96), \"ice\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 41)\n        mstore(add(headStart, 64), \"ERC721: address zero is not a va\")\n        mstore(add(headStart, 96), \"lid owner\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"ERC721URIStorage: URI set of non\")\n        mstore(add(headStart, 96), \"existent token\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_84119526d456dcf2f6af49e086aa4eb21c7aff51b29ee8e478c8a78cf4befc97__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"Only can transfered to others wa\")\n        mstore(add(headStart, 96), \"llet\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"ERC721: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9074ba32ca71a33be0d5bad3f82b59a588b5f08f53731795bb0723c24a23290d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"Only item owner can perform this\")\n        mstore(add(headStart, 96), \" operation\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ad0c789652ea4140f68457b2e431e4064b30c112e50e6f29db9147aeb72df39e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"Nft is already listed\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"ERC721: invalid token ID\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"ERC721: approval to current owne\")\n        mstore(add(headStart, 96), \"r\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_c4a3cb03a777966952a9e0ea8169bdf906c35d5703ed25d4d34802e2702cbca2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"Token not currently listed\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c4c9b34e8a44a82a4ba8962937a0e0f0afa9206f6a506fa182ac004768974dd1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"Price must be equal to listing p\")\n        mstore(add(headStart, 96), \"rice\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 61)\n        mstore(add(headStart, 64), \"ERC721: approve caller is not to\")\n        mstore(add(headStart, 96), \"ken owner or approved for all\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_e342daa49723ff3485f4ff5f755a17b8bc9c3c33bbd312ceee37c94eebfe45c1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"Error\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_edc8fea3fbebc856e7a02453f567aef386473087acd09e17fb0f8683f0dbd60a__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), \"Nft max supply reached\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ef04984094766165d0f3292abebb7fe2c98e15506095c629b0da789b5dea64bb__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"Insufficient funds sent\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f9362b4338ee38e8d4b2edd3f052338cf486175c26ae2491afc37439b965fb19__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"Only item owner can transfer\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_ListedToken_$2985_memory_ptr__to_t_struct$_ListedToken_$2985_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        abi_encode_struct_ListedToken(value0, headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(r, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(r, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function 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 increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_bytes4(value)\n    {\n        if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n    }\n}",
                  "id": 17,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "6080604052600436106101b75760003560e01c80638da5cb5b116100ec578063c322579c1161008a578063e0391b0911610064578063e0391b09146104c2578063e219fc75146104d7578063e22124bc146104ea578063e985e9c51461050a57600080fd5b8063c322579c1461046c578063c87b56dd1461048c578063d5abeb01146104ac57600080fd5b80639b1225c4116100c65780639b1225c414610406578063a22cb46514610419578063b1b654dd14610439578063b88d4fde1461044c57600080fd5b80638da5cb5b146103a45780638e264590146103c457806395d89b41146103f157600080fd5b806342842e0e116101595780636352211e116101335780636352211e1461032f57806368f1945f1461034f5780636eb588d91461036e57806370a082311461038457600080fd5b806342842e0e146102da578063446bb3d8146102fa578063629cb2e41461030d57600080fd5b8063095ea7b311610195578063095ea7b31461024b5780631072cbea1461026d5780632142ae2c1461028d57806323b872dd146102ba57600080fd5b806301ffc9a7146101bc57806306fdde03146101f1578063081812fc14610213575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004612a87565b61052a565b60405190151581526020015b60405180910390f35b3480156101fd57600080fd5b50610206610555565b6040516101e89190612d77565b34801561021f57600080fd5b5061023361022e366004612b52565b6105e7565b6040516001600160a01b0390911681526020016101e8565b34801561025757600080fd5b5061026b610266366004612a5e565b61060e565b005b34801561027957600080fd5b5061026b610288366004612a5e565b610729565b34801561029957600080fd5b506102ad6102a8366004612b52565b610864565b6040516101e89190612d15565b3480156102c657600080fd5b5061026b6102d5366004612981565b6108f9565b3480156102e657600080fd5b5061026b6102f5366004612981565b610936565b61026b610308366004612b52565b610941565b34801561031957600080fd5b50610322610a62565b6040516101e89190612cc7565b34801561033b57600080fd5b5061023361034a366004612b52565b610c5a565b34801561035b57600080fd5b50600a545b6040519081526020016101e8565b34801561037a57600080fd5b50610360600a5481565b34801561039057600080fd5b5061036061039f366004612935565b610cba565b3480156103b057600080fd5b50600954610233906001600160a01b031681565b3480156103d057600080fd5b506103e46103df366004612b52565b610d40565b6040516101e89190612eb8565b3480156103fd57600080fd5b50610206610dfe565b61026b610414366004612b52565b610e0d565b34801561042557600080fd5b5061026b610434366004612a35565b611071565b610360610447366004612ad9565b61107c565b34801561045857600080fd5b5061026b6104673660046129bc565b6111c1565b34801561047857600080fd5b5061026b610487366004612b52565b611200565b34801561049857600080fd5b506102066104a7366004612b52565b61126b565b3480156104b857600080fd5b50610360600b5481565b3480156104ce57600080fd5b50610322611374565b61026b6104e5366004612b6a565b61155c565b3480156104f657600080fd5b50610322610505366004612abf565b6116da565b34801561051657600080fd5b506101dc61052536600461294f565b611991565b60006001600160e01b03198216632483248360e11b148061054f575061054f826119bf565b92915050565b60606000805461056490612f60565b80601f016020809104026020016040519081016040528092919081815260200182805461059090612f60565b80156105dd5780601f106105b2576101008083540402835291602001916105dd565b820191906000526020600020905b8154815290600101906020018083116105c057829003601f168201915b5050505050905090565b60006105f282611a0f565b506000908152600460205260409020546001600160a01b031690565b600061061982610c5a565b9050806001600160a01b0316836001600160a01b0316141561068c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806106a857506106a88133611991565b61071a5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610683565b6107248383611a71565b505050565b6000818152600d60205260409020600101546001600160a01b031633146107925760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79206974656d206f776e65722063616e207472616e73666572000000006044820152606401610683565b6000818152600d602052604090206004015460ff16156107f05760405162461bcd60e51b8152602060048201526019602482015278151bdad95b881a5cc818dd5c9c995b9d1b1e481b1a5cdd1959603a1b6044820152606401610683565b336001600160a01b03831614156108555760405162461bcd60e51b8152602060048201526024808201527f4f6e6c792063616e207472616e73666572656420746f206f74686572732077616044820152631b1b195d60e21b6064820152608401610683565b610860338383611adf565b5050565b6060600e6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156108ee576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018082015484860152600290910154918301919091529083529092019101610899565b505050509050919050565b610904838383611b48565b6000908152600d6020526040902060010180546001600160a01b0319166001600160a01b039290921691909117905550565b610904838383611b79565b6000818152600d60205260409020600101546001600160a01b0316331461097a5760405162461bcd60e51b815260040161068390612e6e565b6000818152600d602052604090206004015460ff1615156001146109e05760405162461bcd60e51b815260206004820152601760248201527f4e667420697320616c726561647920756e6c69737465640000000000000000006044820152606401610683565b6000818152600d602052604080822060048101805460ff19169081905560018201546002830154600390930154935186957f74562ff4aca0f61b76e9b719261c3ed439529c9fbeb002c7ddfac9193b44800c95610a57956001600160a01b0394851695941693909261010090910460ff1690612c56565b60405180910390a250565b60606000610a6f60075490565b9050600060015b828111610abf576000818152600d60205260409020600101546001600160a01b0316331415610aad5781610aa981612f9b565b9250505b80610ab781612f9b565b915050610a76565b5060008167ffffffffffffffff811115610ae957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610b2257816020015b610b0f6127b8565b815260200190600190039081610b075790505b509050600060015b848111610c50576000818152600d60205260409020600101546001600160a01b0316331415610c3e576000818152600d6020908152604091829020825160c0810184528154815260018201546001600160a01b03908116938201939093526002808301549093169381019390935260038101546060840152600481015460ff80821615156080860152919260a085019261010090920490911690811115610be157634e487b7160e01b600052602160045260246000fd5b6002811115610c0057634e487b7160e01b600052602160045260246000fd5b81525050838381518110610c2457634e487b7160e01b600052603260045260246000fd5b60200260200101819052508180610c3a90612f9b565b9250505b80610c4881612f9b565b915050610b2a565b5090949350505050565b6000818152600260205260408120546001600160a01b03168061054f5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610683565b60006001600160a01b038216610d245760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610683565b506001600160a01b031660009081526003602052604090205490565b610d486127b8565b6000828152600d6020908152604091829020825160c0810184528154815260018201546001600160a01b03908116938201939093526002808301549093169381019390935260038101546060840152600481015460ff80821615156080860152919260a085019261010090920490911690811115610dd657634e487b7160e01b600052602160045260246000fd5b6002811115610df557634e487b7160e01b600052602160045260246000fd5b90525092915050565b60606001805461056490612f60565b6000818152600d602052604090206004015460ff16610e6e5760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e206e6f742063757272656e746c79206c69737465640000000000006044820152606401610683565b6000818152600d6020526040902060030154341015610ecf5760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742066756e64732073656e740000000000000000006044820152606401610683565b6000818152600d6020526040812060018101546003909101546001600160a01b03909116916064610f01836005612efe565b610f0b9190612ede565b90506000610f198284612f1d565b6000868152600d6020526040902060048101805460ff1916905560020180546001600160a01b0319166001600160a01b0387161790556008805460010190559050610f65843387611adf565b600954600a546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610fa1573d6000803e3d6000fd5b506040516001600160a01b0385169082156108fc029083906000818181858888f19350505050158015610fd8573d6000803e3d6000fd5b506009546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611013573d6000803e3d6000fd5b50604080513381526001600160a01b038616602082015290810184905285907ff81c2545e78ad9dd77b3ba731ab2cfdce225338866d32fdd91f92f1fda49f14c9060600160405180910390a261106a853385611b94565b5050505050565b610860338383611d1c565b6000600b5461108a60075490565b106110d05760405162461bcd60e51b815260206004820152601660248201527513999d081b585e081cdd5c1c1b1e481c995858da195960521b6044820152606401610683565b60008360028111156110f257634e487b7160e01b600052602160045260246000fd5b148061111d5750600183600281111561111b57634e487b7160e01b600052602160045260246000fd5b145b806111475750600283600281111561114557634e487b7160e01b600052602160045260246000fd5b145b61117b5760405162461bcd60e51b815260206004820152600560248201526422b93937b960d91b6044820152606401610683565b611189600780546001019055565b600061119460075490565b90506111a03382611deb565b6111aa8187611e05565b6111b681868686611ed7565b90505b949350505050565b6111cd848484846120cc565b506000908152600d6020526040902060010180546001600160a01b0319166001600160a01b039290921691909117905550565b6009546001600160a01b031633146112665760405162461bcd60e51b815260206004820152602360248201527f4f6e6c79206f776e65722063616e20757064617465206c697374696e6720707260448201526269636560e81b6064820152608401610683565b600a55565b606061127682611a0f565b6000828152600660205260408120805461128f90612f60565b80601f01602080910402602001604051908101604052809291908181526020018280546112bb90612f60565b80156113085780601f106112dd57610100808354040283529160200191611308565b820191906000526020600020905b8154815290600101906020018083116112eb57829003601f168201915b50505050509050600061132660408051602081019091526000815290565b9050805160001415611339575092915050565b81511561136b578082604051602001611353929190612c27565b60405160208183030381529060405292505050919050565b6111b984612104565b6060600061138160075490565b9050600060015b8281116113ce576000818152600d602052604090206004015460ff161515600114156113bc57816113b881612f9b565b9250505b806113c681612f9b565b915050611388565b5060008167ffffffffffffffff8111156113f857634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561143157816020015b61141e6127b8565b8152602001906001900390816114165790505b509050600060015b848111610c50576000818152600d602052604090206004015460ff1615156001141561154a576000818152600d6020908152604091829020825160c0810184528154815260018201546001600160a01b03908116938201939093526002808301549093169381019390935260038101546060840152600481015460ff80821615156080860152919260a0850192610100909204909116908111156114ed57634e487b7160e01b600052602160045260246000fd5b600281111561150c57634e487b7160e01b600052602160045260246000fd5b8152505083838151811061153057634e487b7160e01b600052603260045260246000fd5b6020026020010181905250818061154690612f9b565b9250505b8061155481612f9b565b915050611439565b6000828152600d60205260409020600101546001600160a01b031633146115955760405162461bcd60e51b815260040161068390612e6e565b6000828152600d602052604090206004015460ff16156115ef5760405162461bcd60e51b815260206004820152601560248201527413999d081a5cc8185b1c9958591e481b1a5cdd1959605a1b6044820152606401610683565b600a54341461164c5760405162461bcd60e51b8152602060048201526024808201527f5072696365206d75737420626520657175616c20746f206c697374696e6720706044820152637269636560e01b6064820152608401610683565b6000828152600d60205260409081902060048101805460ff191660019081179182905560038301859055600290920180546001600160a01b03191633908117909155925185937f74562ff4aca0f61b76e9b719261c3ed439529c9fbeb002c7ddfac9193b44800c936116ce939192309288929161010090910460ff1690612c56565b60405180910390a25050565b606060006116e760075490565b9050600060015b8281116117965784600281111561171557634e487b7160e01b600052602160045260246000fd5b6000828152600d6020526040902060040154610100900460ff16600281111561174e57634e487b7160e01b600052602160045260246000fd5b14801561177157506000818152600d602052604090206004015460ff1615156001145b15611784578161178081612f9b565b9250505b8061178e81612f9b565b9150506116ee565b5060008167ffffffffffffffff8111156117c057634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156117f957816020015b6117e66127b8565b8152602001906001900390816117de5790505b509050600060015b8481116119865786600281111561182857634e487b7160e01b600052602160045260246000fd5b6000828152600d6020526040902060040154610100900460ff16600281111561186157634e487b7160e01b600052602160045260246000fd5b14801561188457506000818152600d602052604090206004015460ff1615156001145b15611974576000818152600d6020908152604091829020825160c0810184528154815260018201546001600160a01b03908116938201939093526002808301549093169381019390935260038101546060840152600481015460ff80821615156080860152919260a08501926101009092049091169081111561191757634e487b7160e01b600052602160045260246000fd5b600281111561193657634e487b7160e01b600052602160045260246000fd5b8152505083838151811061195a57634e487b7160e01b600052603260045260246000fd5b6020026020010181905250818061197090612f9b565b9250505b8061197e81612f9b565b915050611801565b509095945050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b14806119f057506001600160e01b03198216635b5e139f60e01b145b8061054f57506301ffc9a760e01b6001600160e01b031983161461054f565b6000818152600260205260409020546001600160a01b0316611a6e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610683565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611aa682610c5a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600d602052604090206004015460ff1615611b3d5760405162461bcd60e51b8152602060048201526019602482015278151bdad95b881a5cc818dd5c9c995b9d1b1e481b1a5cdd1959603a1b6044820152606401610683565b610904838383612178565b611b5233826122dc565b611b6e5760405162461bcd60e51b815260040161068390612d8a565b610724838383611adf565b610724838383604051806020016040528060008152506111c1565b6000838152600e60205260409020805460031415611cb45760005b6002811015611c645781611bc4826001612ec6565b81548110611be257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201828281548110611c1057634e487b7160e01b600052603260045260246000fd5b60009182526020909120825460039092020180546001600160a01b0319166001600160a01b039092169190911781556001808301549082015560029182015491015580611c5c81612f9b565b915050611baf565b5080805480611c8357634e487b7160e01b600052603160045260246000fd5b60008281526020812060036000199093019283020180546001600160a01b0319168155600181018290556002015590555b604080516060810182526001600160a01b0394851681526020808201948552429282019283528354600180820186556000958652919094209151600390940290910180546001600160a01b031916939095169290921784559151908301555160029091015550565b816001600160a01b0316836001600160a01b03161415611d7e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610683565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61086082826040518060200160405280600081525061233a565b6000828152600260205260409020546001600160a01b0316611e805760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610683565b60008281526006602090815260409091208251611e9f928401906127eb565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b600a543414611f1f5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd081c1c9a58d9481cd95b9d60621b6044820152606401610683565b60008311611f6f5760405162461bcd60e51b815260206004820152601f60248201527f5072696365206d7573742062652067726561746572207468616e207a65726f006044820152606401610683565b6040518060c00160405280858152602001336001600160a01b0316815260200160006001600160a01b031681526020018481526020018215158152602001836002811115611fcd57634e487b7160e01b600052602160045260246000fd5b90526000858152600d602090815260409182902083518155908301516001820180546001600160a01b039283166001600160a01b0319918216179091559284015160028084018054929093169190941617905560608301516003820155608083015160048201805491151560ff1983168117825560a08601519394919261ff001990911661ffff19909116179061010090849081111561207d57634e487b7160e01b600052602160045260246000fd5b0217905550905050837f74562ff4aca0f61b76e9b719261c3ed439529c9fbeb002c7ddfac9193b44800c3360008685876040516120be959493929190612c56565b60405180910390a250505050565b6120d633836122dc565b6120f25760405162461bcd60e51b815260040161068390612d8a565b6120fe8484848461236d565b50505050565b606061210f82611a0f565b600061212660408051602081019091526000815290565b905060008151116121465760405180602001604052806000815250612171565b80612150846123a0565b604051602001612161929190612c27565b6040516020818303038152906040525b9392505050565b826001600160a01b031661218b82610c5a565b6001600160a01b0316146121b15760405162461bcd60e51b815260040161068390612e29565b6001600160a01b0382166122135760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610683565b826001600160a01b031661222682610c5a565b6001600160a01b03161461224c5760405162461bcd60e51b815260040161068390612e29565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000806122e883610c5a565b9050806001600160a01b0316846001600160a01b0316148061230f575061230f8185611991565b806111b95750836001600160a01b0316612328846105e7565b6001600160a01b031614949350505050565b612344838361244b565b61235160008484846125d6565b6107245760405162461bcd60e51b815260040161068390612dd7565b612378848484611adf565b612384848484846125d6565b6120fe5760405162461bcd60e51b815260040161068390612dd7565b606060006123ad836126e0565b600101905060008167ffffffffffffffff8111156123db57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612405576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461243e57612443565b61240f565b509392505050565b6001600160a01b0382166124a15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610683565b6000818152600260205260409020546001600160a01b0316156125065760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610683565b6000818152600260205260409020546001600160a01b03161561256b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610683565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156126d857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061261a903390899088908890600401612c94565b602060405180830381600087803b15801561263457600080fd5b505af1925050508015612664575060408051601f3d908101601f1916820190925261266191810190612aa3565b60015b6126be573d808015612692576040519150601f19603f3d011682016040523d82523d6000602084013e612697565b606091505b5080516126b65760405162461bcd60e51b815260040161068390612dd7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506111b9565b5060016111b9565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061271f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061274b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061276957662386f26fc10000830492506010015b6305f5e1008310612781576305f5e100830492506008015b612710831061279557612710830492506004015b606483106127a7576064830492506002015b600a831061054f5760010192915050565b6040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b8280546127f790612f60565b90600052602060002090601f016020900481019282612819576000855561285f565b82601f1061283257805160ff191683800117855561285f565b8280016001018555821561285f579182015b8281111561285f578251825591602001919060010190612844565b5061286b92915061286f565b5090565b5b8082111561286b5760008155600101612870565b600067ffffffffffffffff8084111561289f5761289f612fcc565b604051601f8501601f19908116603f011681019082821181831017156128c7576128c7612fcc565b816040528093508581528686860111156128e057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461291157600080fd5b919050565b8035801515811461291157600080fd5b80356003811061291157600080fd5b600060208284031215612946578081fd5b612171826128fa565b60008060408385031215612961578081fd5b61296a836128fa565b9150612978602084016128fa565b90509250929050565b600080600060608486031215612995578081fd5b61299e846128fa565b92506129ac602085016128fa565b9150604084013590509250925092565b600080600080608085870312156129d1578081fd5b6129da856128fa565b93506129e8602086016128fa565b925060408501359150606085013567ffffffffffffffff811115612a0a578182fd5b8501601f81018713612a1a578182fd5b612a2987823560208401612884565b91505092959194509250565b60008060408385031215612a47578182fd5b612a50836128fa565b915061297860208401612916565b60008060408385031215612a70578182fd5b612a79836128fa565b946020939093013593505050565b600060208284031215612a98578081fd5b813561217181612fe2565b600060208284031215612ab4578081fd5b815161217181612fe2565b600060208284031215612ad0578081fd5b61217182612926565b60008060008060808587031215612aee578384fd5b843567ffffffffffffffff811115612b04578485fd5b8501601f81018713612b14578485fd5b612b2387823560208401612884565b94505060208501359250612b3960408601612926565b9150612b4760608601612916565b905092959194509250565b600060208284031215612b63578081fd5b5035919050565b60008060408385031215612b7c578182fd5b50508035926020909101359150565b60008151808452612ba3816020860160208601612f34565b601f01601f19169290920160200192915050565b60038110612bd557634e487b7160e01b600052602160045260246000fd5b9052565b80518252602081015160018060a01b03808216602085015280604084015116604085015250506060810151606083015260808101511515608083015260a081015161072460a0840182612bb7565b60008351612c39818460208801612f34565b835190830190612c4d818360208801612f34565b01949350505050565b6001600160a01b0386811682528516602082015260408101849052821515606082015260a08101612c8a6080830184612bb7565b9695505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c8a90830184612b8b565b6020808252825182820181905260009190848201906040850190845b81811015612d0957612cf6838551612bd9565b9284019260c09290920191600101612ce3565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015612d6a57815180516001600160a01b0316855286810151878601528501518585015260609093019290850190600101612d32565b5091979650505050505050565b6020815260006121716020830184612b8b565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252602a908201527f4f6e6c79206974656d206f776e65722063616e20706572666f726d20746869736040820152691037b832b930ba34b7b760b11b606082015260800190565b60c0810161054f8284612bd9565b60008219821115612ed957612ed9612fb6565b500190565b600082612ef957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612f1857612f18612fb6565b500290565b600082821015612f2f57612f2f612fb6565b500390565b60005b83811015612f4f578181015183820152602001612f37565b838111156120fe5750506000910152565b600181811c90821680612f7457607f821691505b60208210811415612f9557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612faf57612faf612fb6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611a6e57600080fdfea2646970667358221220387bcaad981891fa7041a9af96ac01c8696001b5fa6444bc0cd6df5885f22efb64736f6c63430008040033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1B7 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xEC JUMPI DUP1 PUSH4 0xC322579C GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xE0391B09 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xE0391B09 EQ PUSH2 0x4C2 JUMPI DUP1 PUSH4 0xE219FC75 EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0xE22124BC EQ PUSH2 0x4EA JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x50A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC322579C EQ PUSH2 0x46C JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0xD5ABEB01 EQ PUSH2 0x4AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9B1225C4 GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0x9B1225C4 EQ PUSH2 0x406 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x419 JUMPI DUP1 PUSH4 0xB1B654DD EQ PUSH2 0x439 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x8E264590 EQ PUSH2 0x3C4 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42842E0E GT PUSH2 0x159 JUMPI DUP1 PUSH4 0x6352211E GT PUSH2 0x133 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x32F JUMPI DUP1 PUSH4 0x68F1945F EQ PUSH2 0x34F JUMPI DUP1 PUSH4 0x6EB588D9 EQ PUSH2 0x36E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42842E0E EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0x446BB3D8 EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x629CB2E4 EQ PUSH2 0x30D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x195 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x24B JUMPI DUP1 PUSH4 0x1072CBEA EQ PUSH2 0x26D JUMPI DUP1 PUSH4 0x2142AE2C EQ PUSH2 0x28D JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x213 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x1D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A87 JUMP JUMPDEST PUSH2 0x52A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x555 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x2D77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x233 PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0x5E7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x266 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A5E JUMP JUMPDEST PUSH2 0x60E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x288 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A5E JUMP JUMPDEST PUSH2 0x729 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AD PUSH2 0x2A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0x864 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x2D15 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x2D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2981 JUMP JUMPDEST PUSH2 0x8F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x2F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2981 JUMP JUMPDEST PUSH2 0x936 JUMP JUMPDEST PUSH2 0x26B PUSH2 0x308 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0x941 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x319 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x322 PUSH2 0xA62 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x2CC7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x233 PUSH2 0x34A CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0xC5A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xA SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x360 PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x390 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x360 PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x2935 JUMP JUMPDEST PUSH2 0xCBA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x9 SLOAD PUSH2 0x233 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E4 PUSH2 0x3DF CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0xD40 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x2EB8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0xDFE JUMP JUMPDEST PUSH2 0x26B PUSH2 0x414 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0xE0D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x425 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x434 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A35 JUMP JUMPDEST PUSH2 0x1071 JUMP JUMPDEST PUSH2 0x360 PUSH2 0x447 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x107C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x467 CALLDATASIZE PUSH1 0x4 PUSH2 0x29BC JUMP JUMPDEST PUSH2 0x11C1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x487 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0x1200 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x4A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B52 JUMP JUMPDEST PUSH2 0x126B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x360 PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x322 PUSH2 0x1374 JUMP JUMPDEST PUSH2 0x26B PUSH2 0x4E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B6A JUMP JUMPDEST PUSH2 0x155C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x322 PUSH2 0x505 CALLDATASIZE PUSH1 0x4 PUSH2 0x2ABF JUMP JUMPDEST PUSH2 0x16DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x525 CALLDATASIZE PUSH1 0x4 PUSH2 0x294F JUMP JUMPDEST PUSH2 0x1991 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x24832483 PUSH1 0xE1 SHL EQ DUP1 PUSH2 0x54F JUMPI POP PUSH2 0x54F DUP3 PUSH2 0x19BF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD PUSH2 0x564 SWAP1 PUSH2 0x2F60 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 0x590 SWAP1 PUSH2 0x2F60 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x5DD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5B2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x5DD 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 0x5C0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F2 DUP3 PUSH2 0x1A0F JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x619 DUP3 PUSH2 0xC5A JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x68C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76616C20746F2063757272656E74206F776E65 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x39 PUSH1 0xF9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 PUSH2 0x6A8 JUMPI POP PUSH2 0x6A8 DUP2 CALLER PUSH2 0x1991 JUMP JUMPDEST PUSH2 0x71A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76652063616C6C6572206973206E6F7420746F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6B656E206F776E6572206F7220617070726F76656420666F7220616C6C000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST PUSH2 0x724 DUP4 DUP4 PUSH2 0x1A71 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x792 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F6E6C79206974656D206F776E65722063616E207472616E7366657200000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x7F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x151BDAD95B881A5CC818DD5C9C995B9D1B1E481B1A5CDD1959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ ISZERO PUSH2 0x855 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4F6E6C792063616E207472616E73666572656420746F206F7468657273207761 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x1B1B195D PUSH1 0xE2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST PUSH2 0x860 CALLER DUP4 DUP4 PUSH2 0x1ADF JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0xE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0x8EE JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x3 DUP7 MUL SWAP1 SWAP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE PUSH1 0x1 DUP1 DUP3 ADD SLOAD DUP5 DUP7 ADD MSTORE PUSH1 0x2 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP4 MSTORE SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x899 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x904 DUP4 DUP4 DUP4 PUSH2 0x1B48 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x904 DUP4 DUP4 DUP4 PUSH2 0x1B79 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x97A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2E6E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ PUSH2 0x9E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E667420697320616C726561647920756E6C6973746564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP4 MLOAD DUP7 SWAP6 PUSH32 0x74562FF4ACA0F61B76E9B719261C3ED439529C9FBEB002C7DDFAC9193B44800C SWAP6 PUSH2 0xA57 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP6 SWAP5 AND SWAP4 SWAP1 SWAP3 PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0xFF AND SWAP1 PUSH2 0x2C56 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xA6F PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP3 DUP2 GT PUSH2 0xABF JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO PUSH2 0xAAD JUMPI DUP2 PUSH2 0xAA9 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0xAB7 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0xA76 JUMP JUMPDEST POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAE9 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB22 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0xB0F PUSH2 0x27B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xB07 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP5 DUP2 GT PUSH2 0xC50 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO PUSH2 0xC3E JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO PUSH1 0x80 DUP7 ADD MSTORE SWAP2 SWAP3 PUSH1 0xA0 DUP6 ADD SWAP3 PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xBE1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xC00 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 MSTORE POP POP DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xC24 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP2 DUP1 PUSH2 0xC3A SWAP1 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0xC48 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0xB2A JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x54F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x115490CDCC8C4E881A5B9D985B1A59081D1BDAD95B881251 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD24 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A2061646472657373207A65726F206973206E6F742061207661 PUSH1 0x44 DUP3 ADD MSTORE PUSH9 0x3634B21037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xD48 PUSH2 0x27B8 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO PUSH1 0x80 DUP7 ADD MSTORE SWAP2 SWAP3 PUSH1 0xA0 DUP6 ADD SWAP3 PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xDD6 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xDF5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x564 SWAP1 PUSH2 0x2F60 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND PUSH2 0xE6E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E206E6F742063757272656E746C79206C6973746564000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD CALLVALUE LT ISZERO PUSH2 0xECF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E742066756E64732073656E74000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x3 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH1 0x64 PUSH2 0xF01 DUP4 PUSH1 0x5 PUSH2 0x2EFE JUMP JUMPDEST PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x2EDE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF19 DUP3 DUP5 PUSH2 0x2F1D JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND OR SWAP1 SSTORE PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE SWAP1 POP PUSH2 0xF65 DUP5 CALLER DUP8 PUSH2 0x1ADF JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0xA SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xFA1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xFD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x9 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1013 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP6 SWAP1 PUSH32 0xF81C2545E78AD9DD77B3BA731AB2CFDCE225338866D32FDD91F92F1FDA49F14C SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x106A DUP6 CALLER DUP6 PUSH2 0x1B94 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x860 CALLER DUP4 DUP4 PUSH2 0x1D1C JUMP JUMPDEST PUSH1 0x0 PUSH1 0xB SLOAD PUSH2 0x108A PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST LT PUSH2 0x10D0 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 0x13999D081B585E081CDD5C1C1B1E481C995858DA1959 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x10F2 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ DUP1 PUSH2 0x111D JUMPI POP PUSH1 0x1 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x111B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x1147 JUMPI POP PUSH1 0x2 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1145 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ JUMPDEST PUSH2 0x117B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x22B93937B9 PUSH1 0xD9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH2 0x1189 PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1194 PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x11A0 CALLER DUP3 PUSH2 0x1DEB JUMP JUMPDEST PUSH2 0x11AA DUP2 DUP8 PUSH2 0x1E05 JUMP JUMPDEST PUSH2 0x11B6 DUP2 DUP7 DUP7 DUP7 PUSH2 0x1ED7 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x11CD DUP5 DUP5 DUP5 DUP5 PUSH2 0x20CC JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1266 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F6E6C79206F776E65722063616E20757064617465206C697374696E67207072 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x696365 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0xA SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1276 DUP3 PUSH2 0x1A0F JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH2 0x128F SWAP1 PUSH2 0x2F60 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 0x12BB SWAP1 PUSH2 0x2F60 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1308 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x12DD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1308 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 0x12EB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1326 PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x1339 JUMPI POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x136B JUMPI DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1353 SWAP3 SWAP2 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP3 POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x11B9 DUP5 PUSH2 0x2104 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1381 PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP3 DUP2 GT PUSH2 0x13CE JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x13BC JUMPI DUP2 PUSH2 0x13B8 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0x13C6 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1388 JUMP JUMPDEST POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13F8 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1431 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x141E PUSH2 0x27B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1416 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP5 DUP2 GT PUSH2 0xC50 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x154A JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO PUSH1 0x80 DUP7 ADD MSTORE SWAP2 SWAP3 PUSH1 0xA0 DUP6 ADD SWAP3 PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x14ED JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x150C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 MSTORE POP POP DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1530 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP2 DUP1 PUSH2 0x1546 SWAP1 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0x1554 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1439 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1595 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2E6E JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x15EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x13999D081A5CC8185B1C9958591E481B1A5CDD1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0xA SLOAD CALLVALUE EQ PUSH2 0x164C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x5072696365206D75737420626520657175616C20746F206C697374696E672070 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72696365 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x3 DUP4 ADD DUP6 SWAP1 SSTORE PUSH1 0x2 SWAP1 SWAP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP3 MLOAD DUP6 SWAP4 PUSH32 0x74562FF4ACA0F61B76E9B719261C3ED439529C9FBEB002C7DDFAC9193B44800C SWAP4 PUSH2 0x16CE SWAP4 SWAP2 SWAP3 ADDRESS SWAP3 DUP9 SWAP3 SWAP2 PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0xFF AND SWAP1 PUSH2 0x2C56 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x16E7 PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP3 DUP2 GT PUSH2 0x1796 JUMPI DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1715 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x174E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ DUP1 ISZERO PUSH2 0x1771 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x1784 JUMPI DUP2 PUSH2 0x1780 DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0x178E DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0x16EE JUMP JUMPDEST POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x17C0 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x17F9 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x17E6 PUSH2 0x27B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x17DE JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 JUMPDEST DUP5 DUP2 GT PUSH2 0x1986 JUMPI DUP7 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1828 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1861 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ DUP1 ISZERO PUSH2 0x1884 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x1974 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO PUSH1 0x80 DUP7 ADD MSTORE SWAP2 SWAP3 PUSH1 0xA0 DUP6 ADD SWAP3 PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x1917 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1936 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 MSTORE POP POP DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x195A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP2 DUP1 PUSH2 0x1970 SWAP1 PUSH2 0x2F9B JUMP JUMPDEST SWAP3 POP POP JUMPDEST DUP1 PUSH2 0x197E DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1801 JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x19F0 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x54F JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ PUSH2 0x54F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1A6E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x115490CDCC8C4E881A5B9D985B1A59081D1BDAD95B881251 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SWAP1 PUSH2 0x1AA6 DUP3 PUSH2 0xC5A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1B3D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x151BDAD95B881A5CC818DD5C9C995B9D1B1E481B1A5CDD1959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH2 0x904 DUP4 DUP4 DUP4 PUSH2 0x2178 JUMP JUMPDEST PUSH2 0x1B52 CALLER DUP3 PUSH2 0x22DC JUMP JUMPDEST PUSH2 0x1B6E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2D8A JUMP JUMPDEST PUSH2 0x724 DUP4 DUP4 DUP4 PUSH2 0x1ADF JUMP JUMPDEST PUSH2 0x724 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x3 EQ ISZERO PUSH2 0x1CB4 JUMPI PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1C64 JUMPI DUP2 PUSH2 0x1BC4 DUP3 PUSH1 0x1 PUSH2 0x2EC6 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x1BE2 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x3 MUL ADD DUP3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1C10 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 DUP3 SLOAD PUSH1 0x3 SWAP1 SWAP3 MUL ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE PUSH1 0x1 DUP1 DUP4 ADD SLOAD SWAP1 DUP3 ADD SSTORE PUSH1 0x2 SWAP2 DUP3 ADD SLOAD SWAP2 ADD SSTORE DUP1 PUSH2 0x1C5C DUP2 PUSH2 0x2F9B JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1BAF JUMP JUMPDEST POP DUP1 DUP1 SLOAD DUP1 PUSH2 0x1C83 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x3 PUSH1 0x0 NOT SWAP1 SWAP4 ADD SWAP3 DUP4 MUL ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 ADD SSTORE SWAP1 SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP5 DUP6 MSTORE TIMESTAMP SWAP3 DUP3 ADD SWAP3 DUP4 MSTORE DUP4 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP7 SSTORE PUSH1 0x0 SWAP6 DUP7 MSTORE SWAP2 SWAP1 SWAP5 KECCAK256 SWAP2 MLOAD PUSH1 0x3 SWAP1 SWAP5 MUL SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP3 OR DUP5 SSTORE SWAP2 MLOAD SWAP1 DUP4 ADD SSTORE MLOAD PUSH1 0x2 SWAP1 SWAP2 ADD SSTORE POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1D7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F766520746F2063616C6C657200000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x860 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x233A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E80 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524337323155524953746F726167653A2055524920736574206F66206E6F6E PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x32BC34B9BA32B73A103A37B5B2B7 PUSH1 0x91 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP3 MLOAD PUSH2 0x1E9F SWAP3 DUP5 ADD SWAP1 PUSH2 0x27EB JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xF8E1A15ABA9398E019F0B49DF1A4FDE98EE17AE345CB5F6B5E2C27F5033E8CE7 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0xA SLOAD CALLVALUE EQ PUSH2 0x1F1F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x125B98DBDC9C9958DD081C1C9A58D9481CD95B9D PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP4 GT PUSH2 0x1F6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5072696365206D7573742062652067726561746572207468616E207A65726F00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1FCD JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SSTORE SWAP1 DUP4 ADD MLOAD PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE SWAP3 DUP5 ADD MLOAD PUSH1 0x2 DUP1 DUP5 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 SWAP1 SWAP5 AND OR SWAP1 SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x3 DUP3 ADD SSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x4 DUP3 ADD DUP1 SLOAD SWAP2 ISZERO ISZERO PUSH1 0xFF NOT DUP4 AND DUP2 OR DUP3 SSTORE PUSH1 0xA0 DUP7 ADD MLOAD SWAP4 SWAP5 SWAP2 SWAP3 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0xFFFF NOT SWAP1 SWAP2 AND OR SWAP1 PUSH2 0x100 SWAP1 DUP5 SWAP1 DUP2 GT ISZERO PUSH2 0x207D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST MUL OR SWAP1 SSTORE POP SWAP1 POP POP DUP4 PUSH32 0x74562FF4ACA0F61B76E9B719261C3ED439529C9FBEB002C7DDFAC9193B44800C CALLER PUSH1 0x0 DUP7 DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x20BE SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2C56 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH2 0x20D6 CALLER DUP4 PUSH2 0x22DC JUMP JUMPDEST PUSH2 0x20F2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2D8A JUMP JUMPDEST PUSH2 0x20FE DUP5 DUP5 DUP5 DUP5 PUSH2 0x236D JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x210F DUP3 PUSH2 0x1A0F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2126 PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x2146 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x2171 JUMP JUMPDEST DUP1 PUSH2 0x2150 DUP5 PUSH2 0x23A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2161 SWAP3 SWAP2 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x218B DUP3 PUSH2 0xC5A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x21B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2E29 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2213 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x683 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2226 DUP3 PUSH2 0xC5A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x224C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2E29 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND DUP1 DUP7 MSTORE PUSH1 0x3 DUP6 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 SSTORE SWAP1 DUP8 AND DUP1 DUP7 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP7 DUP7 MSTORE PUSH1 0x2 SWAP1 SWAP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND DUP5 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD DUP5 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x22E8 DUP4 PUSH2 0xC5A JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x230F JUMPI POP PUSH2 0x230F DUP2 DUP6 PUSH2 0x1991 JUMP JUMPDEST DUP1 PUSH2 0x11B9 JUMPI POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2328 DUP5 PUSH2 0x5E7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2344 DUP4 DUP4 PUSH2 0x244B JUMP JUMPDEST PUSH2 0x2351 PUSH1 0x0 DUP5 DUP5 DUP5 PUSH2 0x25D6 JUMP JUMPDEST PUSH2 0x724 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2DD7 JUMP JUMPDEST PUSH2 0x2378 DUP5 DUP5 DUP5 PUSH2 0x1ADF JUMP JUMPDEST PUSH2 0x2384 DUP5 DUP5 DUP5 DUP5 PUSH2 0x25D6 JUMP JUMPDEST PUSH2 0x20FE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2DD7 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x23AD DUP4 PUSH2 0x26E0 JUMP JUMPDEST PUSH1 0x1 ADD SWAP1 POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x23DB JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2405 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP2 DUP2 ADD PUSH1 0x20 ADD JUMPDEST PUSH1 0x0 NOT ADD PUSH16 0x181899199A1A9B1B9C1CB0B131B232B3 PUSH1 0x81 SHL PUSH1 0xA DUP7 MOD BYTE DUP2 MSTORE8 PUSH1 0xA DUP6 DIV SWAP5 POP DUP5 PUSH2 0x243E JUMPI PUSH2 0x2443 JUMP JUMPDEST PUSH2 0x240F JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x24A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A206D696E7420746F20746865207A65726F2061646472657373 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2506 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20746F6B656E20616C7265616479206D696E74656400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x256B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20746F6B656E20616C7265616479206D696E74656400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x683 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP5 DUP4 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP5 OR SWAP1 SSTORE MLOAD DUP4 SWAP3 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 DUP3 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO PUSH2 0x26D8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0x261A SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2C94 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2634 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x2664 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x2661 SWAP2 DUP2 ADD SWAP1 PUSH2 0x2AA3 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x26BE JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x2692 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2697 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH2 0x26B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x683 SWAP1 PUSH2 0x2DD7 JUMP JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ SWAP1 POP PUSH2 0x11B9 JUMP JUMPDEST POP PUSH1 0x1 PUSH2 0x11B9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 LT PUSH2 0x271F JUMPI PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 DIV SWAP3 POP PUSH1 0x40 ADD JUMPDEST PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 LT PUSH2 0x274B JUMPI PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 DIV SWAP3 POP PUSH1 0x20 ADD JUMPDEST PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0x2769 JUMPI PUSH7 0x2386F26FC10000 DUP4 DIV SWAP3 POP PUSH1 0x10 ADD JUMPDEST PUSH4 0x5F5E100 DUP4 LT PUSH2 0x2781 JUMPI PUSH4 0x5F5E100 DUP4 DIV SWAP3 POP PUSH1 0x8 ADD JUMPDEST PUSH2 0x2710 DUP4 LT PUSH2 0x2795 JUMPI PUSH2 0x2710 DUP4 DIV SWAP3 POP PUSH1 0x4 ADD JUMPDEST PUSH1 0x64 DUP4 LT PUSH2 0x27A7 JUMPI PUSH1 0x64 DUP4 DIV SWAP3 POP PUSH1 0x2 ADD JUMPDEST PUSH1 0xA DUP4 LT PUSH2 0x54F JUMPI PUSH1 0x1 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x27F7 SWAP1 PUSH2 0x2F60 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2819 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x285F JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2832 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x285F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x285F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x285F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2844 JUMP JUMPDEST POP PUSH2 0x286B SWAP3 SWAP2 POP PUSH2 0x286F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x286B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2870 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT ISZERO PUSH2 0x289F JUMPI PUSH2 0x289F PUSH2 0x2FCC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP6 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x28C7 JUMPI PUSH2 0x28C7 PUSH2 0x2FCC JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP1 SWAP4 POP DUP6 DUP2 MSTORE DUP7 DUP7 DUP7 ADD GT ISZERO PUSH2 0x28E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP8 DUP4 ADD ADD MSTORE POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x2911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2946 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2171 DUP3 PUSH2 0x28FA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2961 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x296A DUP4 PUSH2 0x28FA JUMP JUMPDEST SWAP2 POP PUSH2 0x2978 PUSH1 0x20 DUP5 ADD PUSH2 0x28FA JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2995 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x299E DUP5 PUSH2 0x28FA JUMP JUMPDEST SWAP3 POP PUSH2 0x29AC PUSH1 0x20 DUP6 ADD PUSH2 0x28FA JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x29D1 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x29DA DUP6 PUSH2 0x28FA JUMP JUMPDEST SWAP4 POP PUSH2 0x29E8 PUSH1 0x20 DUP7 ADD PUSH2 0x28FA JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A0A JUMPI DUP2 DUP3 REVERT JUMPDEST DUP6 ADD PUSH1 0x1F DUP2 ADD DUP8 SGT PUSH2 0x2A1A JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2A29 DUP8 DUP3 CALLDATALOAD PUSH1 0x20 DUP5 ADD PUSH2 0x2884 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A47 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2A50 DUP4 PUSH2 0x28FA JUMP JUMPDEST SWAP2 POP PUSH2 0x2978 PUSH1 0x20 DUP5 ADD PUSH2 0x2916 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A70 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2A79 DUP4 PUSH2 0x28FA JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A98 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2171 DUP2 PUSH2 0x2FE2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AB4 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2171 DUP2 PUSH2 0x2FE2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AD0 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2171 DUP3 PUSH2 0x2926 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2AEE JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B04 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP6 ADD PUSH1 0x1F DUP2 ADD DUP8 SGT PUSH2 0x2B14 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2B23 DUP8 DUP3 CALLDATALOAD PUSH1 0x20 DUP5 ADD PUSH2 0x2884 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH2 0x2B39 PUSH1 0x40 DUP7 ADD PUSH2 0x2926 JUMP JUMPDEST SWAP2 POP PUSH2 0x2B47 PUSH1 0x60 DUP7 ADD PUSH2 0x2916 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B63 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B7C JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2BA3 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x2F34 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x2BD5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x20 DUP6 ADD MSTORE DUP1 PUSH1 0x40 DUP5 ADD MLOAD AND PUSH1 0x40 DUP6 ADD MSTORE POP POP PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH2 0x724 PUSH1 0xA0 DUP5 ADD DUP3 PUSH2 0x2BB7 JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD PUSH2 0x2C39 DUP2 DUP5 PUSH1 0x20 DUP9 ADD PUSH2 0x2F34 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP4 ADD SWAP1 PUSH2 0x2C4D DUP2 DUP4 PUSH1 0x20 DUP9 ADD PUSH2 0x2F34 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND DUP3 MSTORE DUP6 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE DUP3 ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 ADD PUSH2 0x2C8A PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x2BB7 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2C8A SWAP1 DUP4 ADD DUP5 PUSH2 0x2B8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2D09 JUMPI PUSH2 0x2CF6 DUP4 DUP6 MLOAD PUSH2 0x2BD9 JUMP JUMPDEST SWAP3 DUP5 ADD SWAP3 PUSH1 0xC0 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2CE3 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x40 SWAP1 DUP2 DUP6 ADD SWAP1 DUP7 DUP5 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D6A JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE DUP7 DUP2 ADD MLOAD DUP8 DUP7 ADD MSTORE DUP6 ADD MLOAD DUP6 DUP6 ADD MSTORE PUSH1 0x60 SWAP1 SWAP4 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D32 JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2171 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2B8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2D SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A2063616C6C6572206973206E6F7420746F6B656E206F776E65 PUSH1 0x40 DUP3 ADD MSTORE PUSH13 0x1C881BDC88185C1C1C9BDD9959 PUSH1 0x9A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x32 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F206E6F6E204552433732315265 PUSH1 0x40 DUP3 ADD MSTORE PUSH18 0x31B2B4BB32B91034B6B83632B6B2B73A32B9 PUSH1 0x71 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E736665722066726F6D20696E636F727265637420 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x37BBB732B9 PUSH1 0xD9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x4F6E6C79206974656D206F776E65722063616E20706572666F726D2074686973 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x1037B832B930BA34B7B7 PUSH1 0xB1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD PUSH2 0x54F DUP3 DUP5 PUSH2 0x2BD9 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2ED9 JUMPI PUSH2 0x2ED9 PUSH2 0x2FB6 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2EF9 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 DUP2 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2F18 JUMPI PUSH2 0x2F18 PUSH2 0x2FB6 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2F2F JUMPI PUSH2 0x2F2F PUSH2 0x2FB6 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2F4F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2F37 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x20FE JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x2F74 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2F95 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x2FAF JUMPI PUSH2 0x2FAF PUSH2 0x2FB6 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x1A6E JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE PUSH28 0xCAAD981891FA7041A9AF96AC01C8696001B5FA6444BC0CD6DF5885F2 0x2E 0xFB PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "196:9584:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;535:205:6;;;;;;;;;;-1:-1:-1;535:205:6;;;;;:::i;:::-;;:::i;:::-;;;10913:14:17;;10906:22;10888:41;;10876:2;10861:18;535:205:6;;;;;;;;2471:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3935:167::-;;;;;;;;;;-1:-1:-1;3935:167:3;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6839:32:17;;;6821:51;;6809:2;6794:18;3935:167:3;6776:102:17;3468:406:3;;;;;;;;;;-1:-1:-1;3468:406:3;;;;;:::i;:::-;;:::i;:::-;;8919:374:16;;;;;;;;;;-1:-1:-1;8919:374:16;;;;;:::i;:::-;;:::i;5567:135::-;;;;;;;;;;-1:-1:-1;5567:135:16;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8009:189::-;;;;;;;;;;-1:-1:-1;8009:189:16;;;;;:::i;:::-;;:::i;8204:197::-;;;;;;;;;;-1:-1:-1;8204:197:16;;;;;:::i;:::-;;:::i;7409:590::-;;;;;;:::i;:::-;;:::i;4101:667::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2190:219:3:-;;;;;;;;;;-1:-1:-1;2190:219:3;;;;;:::i;:::-;;:::i;2091:87:16:-;;;;;;;;;;-1:-1:-1;2162:9:16;;2091:87;;;21438:25:17;;;21426:2;21411:18;2091:87:16;21393:76:17;403:36:16;;;;;;;;;;;;;;;;1929:204:3;;;;;;;;;;-1:-1:-1;1929:204:3;;;;;:::i;:::-;;:::i;369:28:16:-;;;;;;;;;;-1:-1:-1;369:28:16;;;;-1:-1:-1;;;;;369:28:16;;;1950:135;;;;;;;;;;-1:-1:-1;1950:135:16;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2633:102:3:-;;;;;;;;;;;;;:::i;5708:958:16:-;;;;;;:::i;:::-;;:::i;4169:153:3:-;;;;;;;;;;-1:-1:-1;4169:153:3;;;;;:::i;:::-;;:::i;2184:611:16:-;;;;;;:::i;:::-;;:::i;8407:224::-;;;;;;;;;;-1:-1:-1;8407:224:16;;;;;:::i;:::-;;:::i;1776:168::-;;;;;;;;;;-1:-1:-1;1776:168:16;;;;;:::i;:::-;;:::i;806:608:6:-;;;;;;;;;;-1:-1:-1;806:608:6;;;;;:::i;:::-;;:::i;445:30:16:-;;;;;;;;;;;;;;;;3432:663;;;;;;;;;;;;;:::i;6672:731::-;;;;;;:::i;:::-;;:::i;4774:787::-;;;;;;;;;;-1:-1:-1;4774:787:16;;;;;:::i;:::-;;:::i;4388:162:3:-;;;;;;;;;;-1:-1:-1;4388:162:3;;;;;:::i;:::-;;:::i;535:205:6:-;637:4;-1:-1:-1;;;;;;660:33:6;;-1:-1:-1;;;660:33:6;;:73;;;697:36;721:11;697:23;:36::i;:::-;653:80;535:205;-1:-1:-1;;535:205:6:o;2471:98:3:-;2525:13;2557:5;2550:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2471:98;:::o;3935:167::-;4011:7;4030:23;4045:7;4030:14;:23::i;:::-;-1:-1:-1;4071:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;4071:24:3;;3935:167::o;3468:406::-;3548:13;3564:23;3579:7;3564:14;:23::i;:::-;3548:39;;3611:5;-1:-1:-1;;;;;3605:11:3;:2;-1:-1:-1;;;;;3605:11:3;;;3597:57;;;;-1:-1:-1;;;3597:57:3;;18245:2:17;3597:57:3;;;18227:21:17;18284:2;18264:18;;;18257:30;18323:34;18303:18;;;18296:62;-1:-1:-1;;;18374:18:17;;;18367:31;18415:19;;3597:57:3;;;;;;;;;719:10:9;-1:-1:-1;;;;;3686:21:3;;;;:62;;-1:-1:-1;3711:37:3;3728:5;719:10:9;4388:162:3;:::i;3711:37::-;3665:170;;;;-1:-1:-1;;;3665:170:3;;19407:2:17;3665:170:3;;;19389:21:17;19446:2;19426:18;;;19419:30;19485:34;19465:18;;;19458:62;19556:31;19536:18;;;19529:59;19605:19;;3665:170:3;19379:251:17;3665:170:3;3846:21;3855:2;3859:7;3846:8;:21::i;:::-;3468:406;;;:::o;8919:374:16:-;9000:24;;;;:15;:24;;;;;:30;;;-1:-1:-1;;;;;9000:30:16;9034:10;9000:44;8992:85;;;;-1:-1:-1;;;8992:85:16;;20873:2:17;8992:85:16;;;20855:21:17;20912:2;20892:18;;;20885:30;20951;20931:18;;;20924:58;20999:18;;8992:85:16;20845:178:17;8992:85:16;9096:24;;;;:15;:24;;;;;:40;;;;;9095:41;9087:79;;;;-1:-1:-1;;;9087:79:16;;14782:2:17;9087:79:16;;;14764:21:17;14821:2;14801:18;;;14794:30;-1:-1:-1;;;14840:18:17;;;14833:55;14905:18;;9087:79:16;14754:175:17;9087:79:16;9184:10;-1:-1:-1;;;;;9184:16:16;;;;9176:65;;;;-1:-1:-1;;;9176:65:16;;16365:2:17;9176:65:16;;;16347:21:17;16404:2;16384:18;;;16377:30;16443:34;16423:18;;;16416:62;-1:-1:-1;;;16494:18:17;;;16487:34;16538:19;;9176:65:16;16337:226:17;9176:65:16;9252:34;9262:10;9274:2;9278:7;9252:9;:34::i;:::-;8919:374;;:::o;5567:135::-;5630:21;5670:16;:25;5687:7;5670:25;;;;;;;;;;;5663:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5663:32:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5567:135;;;:::o;8009:189::-;8100:37;8119:4;8125:2;8129:7;8100:18;:37::i;:::-;8147:24;;;;:15;:24;;;;;:30;;:44;;-1:-1:-1;;;;;;8147:44:16;-1:-1:-1;;;;;8147:44:16;;;;;;;;;;-1:-1:-1;8009:189:16:o;8204:197::-;8299:41;8322:4;8328:2;8332:7;8299:22;:41::i;7409:590::-;7480:24;;;;:15;:24;;;;;:30;;;-1:-1:-1;;;;;7480:30:16;7514:10;7480:44;7472:99;;;;-1:-1:-1;;;7472:99:16;;;;;;;:::i;:::-;7589:24;;;;:15;:24;;;;;:40;;;;;:48;;:40;:48;7581:83;;;;-1:-1:-1;;;7581:83:16;;14430:2:17;7581:83:16;;;14412:21:17;14469:2;14449:18;;;14442:30;14508:25;14488:18;;;14481:53;14551:18;;7581:83:16;14402:173:17;7581:83:16;7718:5;7675:24;;;:15;:24;;;;;;:40;;;:48;;-1:-1:-1;;7675:48:16;;;;;;7792:30;;;7836:31;;;;7881:30;;;;;7739:252;;7691:7;;7739:252;;;;-1:-1:-1;;;;;7792:30:16;;;;7836:31;;;7881:30;;7675:48;7944:35;;;7675:48;7944:35;;7739:252;:::i;:::-;;;;;;;;7409:590;:::o;4101:667::-;4143:20;4175:19;4197;:9;918:14:10;;827:112;4197:19:16;4175:41;-1:-1:-1;4226:14:16;4269:1;4255:155;4277:14;4272:1;:19;4255:155;;4316:18;;;;:15;:18;;;;;:24;;;-1:-1:-1;;;;;4316:24:16;4344:10;4316:38;4312:88;;;4374:11;;;;:::i;:::-;;;;4312:88;4293:3;;;;:::i;:::-;;;;4255:155;;;;4420:26;4467:9;4449:28;;;;;;-1:-1:-1;;;4449:28:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;4420:57:16;-1:-1:-1;4487:17:16;4537:1;4523:216;4545:14;4540:1;:19;4523:216;;4584:18;;;;:15;:18;;;;;:24;;;-1:-1:-1;;;;;4584:24:16;4612:10;4584:38;4580:149;;;4664:18;;;;:15;:18;;;;;;;;;4642:40;;;;;;;;;;;;;;;-1:-1:-1;;;;;4642:40:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4664:18;;4642:40;;;;;;;;;;;;;;;;;-1:-1:-1;;;4642:40:16;;;;;;;;;;;;;;;-1:-1:-1;;;4642:40:16;;;;;;;;;;;;;:5;4648:12;4642:19;;;;;;-1:-1:-1;;;4642:19:16;;;;;;;;;;;;;;:40;;;;4700:14;;;;;:::i;:::-;;;;4580:149;4561:3;;;;:::i;:::-;;;;4523:216;;;-1:-1:-1;4756:5:16;;4101:667;-1:-1:-1;;;;4101:667:16:o;2190:219:3:-;2262:7;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:3;;2324:56;;;;-1:-1:-1;;;2324:56:3;;17892:2:17;2324:56:3;;;17874:21:17;17931:2;17911:18;;;17904:30;-1:-1:-1;;;17950:18:17;;;17943:54;18014:18;;2324:56:3;17864:174:17;1929:204:3;2001:7;-1:-1:-1;;;;;2028:19:3;;2020:73;;;;-1:-1:-1;;;2020:73:3;;15540:2:17;2020:73:3;;;15522:21:17;15579:2;15559:18;;;15552:30;15618:34;15598:18;;;15591:62;-1:-1:-1;;;15669:18:17;;;15662:39;15718:19;;2020:73:3;15512:231:17;2020:73:3;-1:-1:-1;;;;;;2110:16:3;;;;;:9;:16;;;;;;;1929:204::o;1950:135:16:-;2017:18;;:::i;:::-;2054:24;;;;:15;:24;;;;;;;;;2047:31;;;;;;;;;;;;;;;-1:-1:-1;;;;;2047:31:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2054:24;;2047:31;;;;;;;;;;;;;;;;;-1:-1:-1;;;2047:31:16;;;;;;;;;;;;;;;-1:-1:-1;;;2047:31:16;;;;;;;;;;;-1:-1:-1;2047:31:16;1950:135;-1:-1:-1;;1950:135:16:o;2633:102:3:-;2689:13;2721:7;2714:14;;;;;:::i;5708:958:16:-;5779:24;;;;:15;:24;;;;;:40;;;;;5771:79;;;;-1:-1:-1;;;5771:79:16;;18647:2:17;5771:79:16;;;18629:21:17;18686:2;18666:18;;;18659:30;18725:28;18705:18;;;18698:56;18771:18;;5771:79:16;18619:176:17;5771:79:16;5881:24;;;;:15;:24;;;;;:30;;;5868:9;:43;;5860:79;;;;-1:-1:-1;;;5860:79:16;;20521:2:17;5860:79:16;;;20503:21:17;20560:2;20540:18;;;20533:30;20599:25;20579:18;;;20572:53;20642:18;;5860:79:16;20493:173:17;5860:79:16;5950:22;5975:24;;;:15;:24;;;;;:30;;;;6031;;;;;-1:-1:-1;;;;;5975:30:16;;;;6104:3;6092:9;6031:30;6100:1;6092:9;:::i;:::-;:15;;;;:::i;:::-;6071:36;-1:-1:-1;6117:20:16;6140:18;6071:36;6140:5;:18;:::i;:::-;6212:5;6169:24;;;:15;:24;;;;;:40;;;:48;;-1:-1:-1;;6169:48:16;;;6227:31;;:40;;-1:-1:-1;;;;;;6227:40:16;-1:-1:-1;;;;;6227:40:16;;;;;6277:10;1032:19:10;;-1:-1:-1;1032:19:10;;;6117:41:16;-1:-1:-1;6310:38:16;6320:6;6328:10;6340:7;6310:9;:38::i;:::-;6366:5;;6382:9;;6358:34;;-1:-1:-1;;;;;6366:5:16;;;;6358:34;;;;;6382:9;6366:5;6358:34;6366:5;6358:34;6382:9;6366:5;6358:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6402:29:16;;-1:-1:-1;;;;;6402:15:16;;;:29;;;;;6418:12;;6402:29;;;;6418:12;6402:15;:29;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6449:5:16;;6441:35;;-1:-1:-1;;;;;6449:5:16;;;;6441:35;;;;;6465:10;;6449:5;6441:35;6449:5;6441:35;6465:10;6449:5;6441:35;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6492:110:16;;;6543:10;7938:34:17;;-1:-1:-1;;;;;8008:15:17;;8003:2;7988:18;;7981:43;8040:18;;;8033:34;;;6522:7:16;;6492:110;;7888:2:17;7873:18;6492:110:16;;;;;;;6613:46;6632:7;6641:10;6653:5;6613:18;:46::i;:::-;5708:958;;;;;:::o;4169:153:3:-;4263:52;719:10:9;4296:8:3;4306;4263:18;:52::i;2184:611:16:-;2303:7;2352:9;;2330:19;:9;918:14:10;;827:112;2330:19:16;:31;2322:65;;;;-1:-1:-1;;;2322:65:16;;20170:2:17;2322:65:16;;;20152:21:17;20209:2;20189:18;;;20182:30;-1:-1:-1;;;20228:18:17;;;20221:52;20290:18;;2322:65:16;20142:172:17;2322:65:16;2419:22;2405:10;:36;;;;;;-1:-1:-1;;;2405:36:16;;;;;;;;;;:74;;;-1:-1:-1;2457:22:16;2445:10;:34;;;;;;-1:-1:-1;;;2445:34:16;;;;;;;;;;2405:74;:111;;;-1:-1:-1;2494:22:16;2482:10;:34;;;;;;-1:-1:-1;;;2482:34:16;;;;;;;;;;2405:111;2397:128;;;;-1:-1:-1;;;2397:128:16;;19837:2:17;2397:128:16;;;19819:21:17;19876:1;19856:18;;;19849:29;-1:-1:-1;;;19894:18:17;;;19887:35;19939:18;;2397:128:16;19809:154:17;2397:128:16;2535:21;:9;1032:19:10;;1050:1;1032:19;;;945:123;2535:21:16;2566:18;2587:19;:9;918:14:10;;827:112;2587:19:16;2566:40;;2617:33;2627:10;2639;2617:9;:33::i;:::-;2660:34;2673:10;2685:8;2660:12;:34::i;:::-;2705:55;2723:10;2735:5;2742:10;2753:6;2705:17;:55::i;:::-;2778:10;-1:-1:-1;2184:611:16;;;;;;;:::o;8407:224::-;8522:48;8545:4;8551:2;8555:7;8564:5;8522:22;:48::i;:::-;-1:-1:-1;8580:24:16;;;;:15;:24;;;;;:30;;:44;;-1:-1:-1;;;;;;8580:44:16;-1:-1:-1;;;;;8580:44:16;;;;;;;;;;-1:-1:-1;8407:224:16:o;1776:168::-;1846:5;;-1:-1:-1;;;;;1846:5:16;1855:10;1846:19;1838:67;;;;-1:-1:-1;;;1838:67:16;;15136:2:17;1838:67:16;;;15118:21:17;15175:2;15155:18;;;15148:30;15214:34;15194:18;;;15187:62;-1:-1:-1;;;15265:18:17;;;15258:33;15308:19;;1838:67:16;15108:225:17;1838:67:16;1915:9;:22;1776:168::o;806:608:6:-;879:13;904:23;919:7;904:14;:23::i;:::-;938;964:19;;;:10;:19;;;;;938:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;993:18;1014:10;3395:9:3;;;;;;;;;-1:-1:-1;3395:9:3;;;3319:92;1014:10:6;993:31;;1103:4;1097:18;1119:1;1097:23;1093:70;;;-1:-1:-1;1143:9:6;806:608;-1:-1:-1;;806:608:6:o;1093:70::-;1265:23;;:27;1261:106;;1339:4;1345:9;1322:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1308:48;;;;806:608;;;:::o;1261:106::-;1384:23;1399:7;1384:14;:23::i;3432:663:16:-;3475:20;3507:13;3523:19;:9;918:14:10;;827:112;3523:19:16;3507:35;-1:-1:-1;3552:16:16;3597:1;3583:155;3605:8;3600:1;:13;3583:155;;3638:18;;;;:15;:18;;;;;:34;;;;;:42;;:34;:42;3634:94;;;3700:13;;;;:::i;:::-;;;;3634:94;3615:3;;;;:::i;:::-;;;;3583:155;;;;3748:27;3796:11;3778:30;;;;;;-1:-1:-1;;;3778:30:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;3748:60:16;-1:-1:-1;3818:17:16;3864:1;3850:215;3872:8;3867:1;:13;3850:215;;3905:18;;;;:15;:18;;;;;:34;;;;;:42;;:34;:42;3901:154;;;3990:18;;;;:15;:18;;;;;;;;;3967:41;;;;;;;;;;;;;;;-1:-1:-1;;;;;3967:41:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3990:18;;3967:41;;;;;;;;;;;;;;;;;-1:-1:-1;;;3967:41:16;;;;;;;;;;;;;;;-1:-1:-1;;;3967:41:16;;;;;;;;;;;;;:6;3974:12;3967:20;;;;;;-1:-1:-1;;;3967:20:16;;;;;;;;;;;;;;:41;;;;4026:14;;;;;:::i;:::-;;;;3901:154;3882:3;;;;:::i;:::-;;;;3850:215;;6672:731;6758:24;;;;:15;:24;;;;;:30;;;-1:-1:-1;;;;;6758:30:16;6792:10;6758:44;6750:99;;;;-1:-1:-1;;;6750:99:16;;;;;;;:::i;:::-;6867:24;;;;:15;:24;;;;;:40;;;;;:49;6859:82;;;;-1:-1:-1;;;6859:82:16;;17542:2:17;6859:82:16;;;17524:21:17;17581:2;17561:18;;;17554:30;-1:-1:-1;;;17600:18:17;;;17593:51;17661:18;;6859:82:16;17514:171:17;6859:82:16;6972:9;;6959;:22;6951:71;;;;-1:-1:-1;;;6951:71:16;;19002:2:17;6951:71:16;;;18984:21:17;19041:2;19021:18;;;19014:30;19080:34;19060:18;;;19053:62;-1:-1:-1;;;19131:18:17;;;19124:34;19175:19;;6951:71:16;18974:226:17;6951:71:16;7033:24;;;;:15;:24;;;;;;;:40;;;:47;;-1:-1:-1;;7033:47:16;7076:4;7033:47;;;;;;;7090:30;;;:38;;;7138:31;;;;:53;;-1:-1:-1;;;;;;7138:53:16;7180:10;7138:53;;;;;;7207:188;;7049:7;;7207:188;;;;7180:10;;7292:4;;7123:5;;7076:4;7033:47;7348:35;;;7033:47;7348:35;;7207:188;:::i;:::-;;;;;;;;6672:731;;:::o;4774:787::-;4847:20;4879:13;4895:19;:9;918:14:10;;827:112;4895:19:16;4879:35;-1:-1:-1;4924:16:16;4969:1;4955:202;4977:8;4972:1;:13;4955:202;;5043:10;5010:43;;;;;;-1:-1:-1;;;5010:43:16;;;;;;;;;:18;;;;:15;:18;;;;;:29;;;;;;;;:43;;;;;;-1:-1:-1;;;5010:43:16;;;;;;;;;;:89;;;;-1:-1:-1;5057:18:16;;;;:15;:18;;;;;:34;;;;;:42;;:34;:42;5010:89;5006:141;;;5119:13;;;;:::i;:::-;;;;5006:141;4987:3;;;;:::i;:::-;;;;4955:202;;;;5167:27;5215:11;5197:30;;;;;;-1:-1:-1;;;5197:30:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;5167:60:16;-1:-1:-1;5237:17:16;5283:1;5269:262;5291:8;5286:1;:13;5269:262;;5357:10;5324:43;;;;;;-1:-1:-1;;;5324:43:16;;;;;;;;;:18;;;;:15;:18;;;;;:29;;;;;;;;:43;;;;;;-1:-1:-1;;;5324:43:16;;;;;;;;;;:89;;;;-1:-1:-1;5371:18:16;;;;:15;:18;;;;;:34;;;;;:42;;:34;:42;5324:89;5320:201;;;5456:18;;;;:15;:18;;;;;;;;;5433:41;;;;;;;;;;;;;;;-1:-1:-1;;;;;5433:41:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5456:18;;5433:41;;;;;;;;;;;;;;;;;-1:-1:-1;;;5433:41:16;;;;;;;;;;;;;;;-1:-1:-1;;;5433:41:16;;;;;;;;;;;;;:6;5440:12;5433:20;;;;;;-1:-1:-1;;;5433:20:16;;;;;;;;;;;;;;:41;;;;5492:14;;;;;:::i;:::-;;;;5320:201;5301:3;;;;:::i;:::-;;;;5269:262;;;-1:-1:-1;5548:6:16;;4774:787;-1:-1:-1;;;;;4774:787:16:o;4388:162:3:-;-1:-1:-1;;;;;4508:25:3;;;4485:4;4508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4388:162::o;1570:300::-;1672:4;-1:-1:-1;;;;;;1707:40:3;;-1:-1:-1;;;1707:40:3;;:104;;-1:-1:-1;;;;;;;1763:48:3;;-1:-1:-1;;;1763:48:3;1707:104;:156;;;-1:-1:-1;;;;;;;;;;937:40:12;;;1827:36:3;829:155:12;13240:133:3;7185:4;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:3;13313:53;;;;-1:-1:-1;;;13313:53:3;;17892:2:17;13313:53:3;;;17874:21:17;17931:2;17911:18;;;17904:30;-1:-1:-1;;;17950:18:17;;;17943:54;18014:18;;13313:53:3;17864:174:17;13313:53:3;13240:133;:::o;12572:171::-;12646:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;12646:29:3;-1:-1:-1;;;;;12646:29:3;;;;;;;;:24;;12699:23;12646:24;12699:14;:23::i;:::-;-1:-1:-1;;;;;12690:46:3;;;;;;;;;;;12572:171;;:::o;8637:276:16:-;8737:24;;;;:15;:24;;;;;:40;;;;;8736:41;8728:79;;;;-1:-1:-1;;;8728:79:16;;14782:2:17;8728:79:16;;;14764:21:17;14821:2;14801:18;;;14794:30;-1:-1:-1;;;14840:18:17;;;14833:55;14905:18;;8728:79:16;14754:175:17;8728:79:16;8817:34;8833:4;8839:2;8843:7;8817:15;:34::i;4612:296:3:-;4771:41;719:10:9;4804:7:3;4771:18;:41::i;:::-;4763:99;;;;-1:-1:-1;;;4763:99:3;;;;;;;:::i;:::-;4873:28;4883:4;4889:2;4893:7;4873:9;:28::i;4974:149::-;5077:39;5094:4;5100:2;5104:7;5077:39;;;;;;;;;;;;:16;:39::i;9299:478:16:-;9395:30;9428:25;;;:16;:25;;;;;9467:14;;9485:1;9467:19;9463:165;;;9507:6;9502:89;9523:1;9519;:5;9502:89;;;9562:7;9570:5;:1;9574;9570:5;:::i;:::-;9562:14;;;;;;-1:-1:-1;;;9562:14:16;;;;;;;;;;;;;;;;;;;9549:7;9557:1;9549:10;;;;;;-1:-1:-1;;;9549:10:16;;;;;;;;;;;;;;;;;:27;;:10;;;;;:27;;-1:-1:-1;;;;;;9549:27:16;-1:-1:-1;;;;;9549:27:16;;;;;;;;;;;;;;;;;;;;;;;;;;9526:3;;;;:::i;:::-;;;;9502:89;;;;9604:7;:13;;;;;-1:-1:-1;;;9604:13:16;;;;;;;;;;;;;;;;;-1:-1:-1;;9604:13:16;;;;;;;;;-1:-1:-1;;;;;;9604:13:16;;;;;;;;;;;;;;9463:165;9650:119;;;;;;;;-1:-1:-1;;;;;9650:119:16;;;;;;;;;;;;9743:15;9650:119;;;;;;9637:133;;;;;;;;-1:-1:-1;9637:133:16;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9637:133:16;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9299:478:16:o;12879:277:3:-;12999:8;-1:-1:-1;;;;;12990:17:3;:5;-1:-1:-1;;;;;12990:17:3;;;12982:55;;;;-1:-1:-1;;;12982:55:3;;13727:2:17;12982:55:3;;;13709:21:17;13766:2;13746:18;;;13739:30;13805:27;13785:18;;;13778:55;13850:18;;12982:55:3;13699:175:17;12982:55:3;-1:-1:-1;;;;;13047:25:3;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;13047:46:3;;;;;;;;;;13108:41;;10888::17;;;13108::3;;10861:18:17;13108:41:3;;;;;;;12879:277;;;:::o;7995:108::-;8070:26;8080:2;8084:7;8070:26;;;;;;;;;;;;:9;:26::i;1599:253:6:-;7185:4:3;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:3;1690:75:6;;;;-1:-1:-1;;;1690:75:6;;15950:2:17;1690:75:6;;;15932:21:17;15989:2;15969:18;;;15962:30;16028:34;16008:18;;;16001:62;-1:-1:-1;;;16079:18:17;;;16072:44;16133:19;;1690:75:6;15922:236:17;1690:75:6;1775:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;:::-;-1:-1:-1;1822:23:6;;21438:25:17;;;1822:23:6;;21426:2:17;21411:18;1822:23:6;;;;;;;1599:253;;:::o;2801:625:16:-;2934:9;;2921;:22;2913:55;;;;-1:-1:-1;;;2913:55:16;;14081:2:17;2913:55:16;;;14063:21:17;14120:2;14100:18;;;14093:30;-1:-1:-1;;;14139:18:17;;;14132:50;14199:18;;2913:55:16;14053:170:17;2913:55:16;2994:1;2986:5;:9;2978:53;;;;-1:-1:-1;;;2978:53:16;;11780:2:17;2978:53:16;;;11762:21:17;11819:2;11799:18;;;11792:30;11858:33;11838:18;;;11831:61;11909:18;;2978:53:16;11752:181:17;2978:53:16;3069:173;;;;;;;;3094:7;3069:173;;;;3123:10;-1:-1:-1;;;;;3069:173:16;;;;;3164:1;-1:-1:-1;;;;;3069:173:16;;;;;3181:5;3069:173;;;;3200:6;3069:173;;;;;;3220:10;3069:173;;;;;;-1:-1:-1;;;3069:173:16;;;;;;;;;;;3042:24;;;;:15;:24;;;;;;;;;:200;;;;;;;;;;;;;-1:-1:-1;;;;;3042:200:16;;;-1:-1:-1;;;;;;3042:200:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3042:200:16;;;;;;;;;;:24;;:200;;-1:-1:-1;;3042:200:16;;;-1:-1:-1;;3042:200:16;;;;;;;;;;;;;;-1:-1:-1;;;3042:200:16;;;;;;;;;;;;;;;;;3290:7;3258:161;3311:10;3343:1;3359:5;3378:6;3398:10;3258:161;;;;;;;;;;:::i;:::-;;;;;;;;2801:625;;;;:::o;5189:276:3:-;5319:41;719:10:9;5352:7:3;5319:18;:41::i;:::-;5311:99;;;;-1:-1:-1;;;5311:99:3;;;;;;;:::i;:::-;5420:38;5434:4;5440:2;5444:7;5453:4;5420:13;:38::i;:::-;5189:276;;;;:::o;2801:::-;2874:13;2899:23;2914:7;2899:14;:23::i;:::-;2933:21;2957:10;3395:9;;;;;;;;;-1:-1:-1;3395:9:3;;;3319:92;2957:10;2933:34;;3008:1;2990:7;2984:21;:25;:86;;;;;;;;;;;;;;;;;3036:7;3045:18;:7;:16;:18::i;:::-;3019:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2984:86;2977:93;2801:276;-1:-1:-1;;;2801:276:3:o;11257:1203::-;11381:4;-1:-1:-1;;;;;11354:31:3;:23;11369:7;11354:14;:23::i;:::-;-1:-1:-1;;;;;11354:31:3;;11346:81;;;;-1:-1:-1;;;11346:81:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;11445:16:3;;11437:65;;;;-1:-1:-1;;;11437:65:3;;13322:2:17;11437:65:3;;;13304:21:17;13361:2;13341:18;;;13334:30;13400:34;13380:18;;;13373:62;-1:-1:-1;;;13451:18:17;;;13444:34;13495:19;;11437:65:3;13294:226:17;11437:65:3;11682:4;-1:-1:-1;;;;;11655:31:3;:23;11670:7;11655:14;:23::i;:::-;-1:-1:-1;;;;;11655:31:3;;11647:81;;;;-1:-1:-1;;;11647:81:3;;;;;;;:::i;:::-;11797:24;;;;:15;:24;;;;;;;;11790:31;;-1:-1:-1;;;;;;11790:31:3;;;;;;-1:-1:-1;;;;;12265:15:3;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;12265:20:3;;;12299:13;;;;;;;;;:18;;11790:31;12299:18;;;12337:16;;;:7;:16;;;;;;:21;;;;;;;;;;12374:27;;11813:7;;12374:27;;;3468:406;;;:::o;7404:261::-;7497:4;7513:13;7529:23;7544:7;7529:14;:23::i;:::-;7513:39;;7581:5;-1:-1:-1;;;;;7570:16:3;:7;-1:-1:-1;;;;;7570:16:3;;:52;;;;7590:32;7607:5;7614:7;7590:16;:32::i;:::-;7570:87;;;;7650:7;-1:-1:-1;;;;;7626:31:3;:20;7638:7;7626:11;:20::i;:::-;-1:-1:-1;;;;;7626:31:3;;7562:96;7404:261;-1:-1:-1;;;;7404:261:3:o;8324:279::-;8418:18;8424:2;8428:7;8418:5;:18::i;:::-;8467:53;8498:1;8502:2;8506:7;8515:4;8467:22;:53::i;:::-;8446:150;;;;-1:-1:-1;;;8446:150:3;;;;;;;:::i;6326:267::-;6438:28;6448:4;6454:2;6458:7;6438:9;:28::i;:::-;6484:47;6507:4;6513:2;6517:7;6526:4;6484:22;:47::i;:::-;6476:110;;;;-1:-1:-1;;;6476:110:3;;;;;;;:::i;447:696:11:-;503:13;552:14;569:17;580:5;569:10;:17::i;:::-;589:1;569:21;552:38;;604:20;638:6;627:18;;;;;;-1:-1:-1;;;627:18:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;627:18:11;-1:-1:-1;604:41:11;-1:-1:-1;765:28:11;;;781:2;765:28;820:280;-1:-1:-1;;851:5:11;-1:-1:-1;;;985:2:11;974:14;;969:30;851:5;956:44;1044:2;1035:11;;;-1:-1:-1;1068:10:11;1064:21;;1080:5;;1064:21;820:280;;;-1:-1:-1;1120:6:11;447:696;-1:-1:-1;;;447:696:11:o;8925:920:3:-;-1:-1:-1;;;;;9004:16:3;;8996:61;;;;-1:-1:-1;;;8996:61:3;;16770:2:17;8996:61:3;;;16752:21:17;;;16789:18;;;16782:30;16848:34;16828:18;;;16821:62;16900:18;;8996:61:3;16742:182:17;8996:61:3;7185:4;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:3;7208:31;9067:58;;;;-1:-1:-1;;;9067:58:3;;12965:2:17;9067:58:3;;;12947:21:17;13004:2;12984:18;;;12977:30;13043;13023:18;;;13016:58;13091:18;;9067:58:3;12937:178:17;9067:58:3;7185:4;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:3;7208:31;9271:58;;;;-1:-1:-1;;;9271:58:3;;12965:2:17;9271:58:3;;;12947:21:17;13004:2;12984:18;;;12977:30;13043;13023:18;;;13016:58;13091:18;;9271:58:3;12937:178:17;9271:58:3;-1:-1:-1;;;;;9671:13:3;;;;;;:9;:13;;;;;;;;:18;;9688:1;9671:18;;;9710:16;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9710:21:3;;;;;9747:33;9718:7;;9671:13;;9747:33;;9671:13;;9747:33;8919:374:16;;:::o;13925:831:3:-;14074:4;-1:-1:-1;;;;;14094:13:3;;1702:19:8;:23;14090:660:3;;14129:71;;-1:-1:-1;;;14129:71:3;;-1:-1:-1;;;;;14129:36:3;;;;;:71;;719:10:9;;14180:4:3;;14186:7;;14195:4;;14129:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14129:71:3;;;;;;;;-1:-1:-1;;14129:71:3;;;;;;;;;;;;:::i;:::-;;;14125:573;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14367:13:3;;14363:321;;14409:60;;-1:-1:-1;;;14409:60:3;;;;;;;:::i;14363:321::-;14636:6;14630:13;14621:6;14617:2;14613:15;14606:38;14125:573;-1:-1:-1;;;;;;14250:51:3;-1:-1:-1;;;14250:51:3;;-1:-1:-1;14243:58:3;;14090:660;-1:-1:-1;14735:4:3;14728:11;;10139:916:14;10192:7;;-1:-1:-1;;;10267:17:14;;10263:103;;-1:-1:-1;;;10304:17:14;;;-1:-1:-1;10349:2:14;10339:12;10263:103;10392:8;10383:5;:17;10379:103;;10429:8;10420:17;;;-1:-1:-1;10465:2:14;10455:12;10379:103;10508:8;10499:5;:17;10495:103;;10545:8;10536:17;;;-1:-1:-1;10581:2:14;10571:12;10495:103;10624:7;10615:5;:16;10611:100;;10660:7;10651:16;;;-1:-1:-1;10695:1:14;10685:11;10611:100;10737:7;10728:5;:16;10724:100;;10773:7;10764:16;;;-1:-1:-1;10808:1:14;10798:11;10724:100;10850:7;10841:5;:16;10837:100;;10886:7;10877:16;;;-1:-1:-1;10921:1:14;10911:11;10837:100;10963:7;10954:5;:16;10950:66;;11000:1;10990:11;11042:6;10139:916;-1:-1:-1;;10139:916:14:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:17;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:17;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:17;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:2;;978:1;975;968:12;993:151;1069:20;;1118:1;1108:12;;1098:2;;1134:1;1131;1124:12;1149:196;1208:6;1261:2;1249:9;1240:7;1236:23;1232:32;1229:2;;;1282:6;1274;1267:22;1229:2;1310:29;1329:9;1310:29;:::i;1350:270::-;1418:6;1426;1479:2;1467:9;1458:7;1454:23;1450:32;1447:2;;;1500:6;1492;1485:22;1447:2;1528:29;1547:9;1528:29;:::i;:::-;1518:39;;1576:38;1610:2;1599:9;1595:18;1576:38;:::i;:::-;1566:48;;1437:183;;;;;:::o;1625:338::-;1702:6;1710;1718;1771:2;1759:9;1750:7;1746:23;1742:32;1739:2;;;1792:6;1784;1777:22;1739:2;1820:29;1839:9;1820:29;:::i;:::-;1810:39;;1868:38;1902:2;1891:9;1887:18;1868:38;:::i;:::-;1858:48;;1953:2;1942:9;1938:18;1925:32;1915:42;;1729:234;;;;;:::o;1968:696::-;2063:6;2071;2079;2087;2140:3;2128:9;2119:7;2115:23;2111:33;2108:2;;;2162:6;2154;2147:22;2108:2;2190:29;2209:9;2190:29;:::i;:::-;2180:39;;2238:38;2272:2;2261:9;2257:18;2238:38;:::i;:::-;2228:48;;2323:2;2312:9;2308:18;2295:32;2285:42;;2378:2;2367:9;2363:18;2350:32;2405:18;2397:6;2394:30;2391:2;;;2442:6;2434;2427:22;2391:2;2470:22;;2523:4;2515:13;;2511:27;-1:-1:-1;2501:2:17;;2557:6;2549;2542:22;2501:2;2585:73;2650:7;2645:2;2632:16;2627:2;2623;2619:11;2585:73;:::i;:::-;2575:83;;;2098:566;;;;;;;:::o;2669:264::-;2734:6;2742;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2816:6;2808;2801:22;2763:2;2844:29;2863:9;2844:29;:::i;:::-;2834:39;;2892:35;2923:2;2912:9;2908:18;2892:35;:::i;2938:264::-;3006:6;3014;3067:2;3055:9;3046:7;3042:23;3038:32;3035:2;;;3088:6;3080;3073:22;3035:2;3116:29;3135:9;3116:29;:::i;:::-;3106:39;3192:2;3177:18;;;;3164:32;;-1:-1:-1;;;3025:177:17:o;3207:255::-;3265:6;3318:2;3306:9;3297:7;3293:23;3289:32;3286:2;;;3339:6;3331;3324:22;3286:2;3383:9;3370:23;3402:30;3426:5;3402:30;:::i;3467:259::-;3536:6;3589:2;3577:9;3568:7;3564:23;3560:32;3557:2;;;3610:6;3602;3595:22;3557:2;3647:9;3641:16;3666:30;3690:5;3666:30;:::i;3731:219::-;3805:6;3858:2;3846:9;3837:7;3833:23;3829:32;3826:2;;;3879:6;3871;3864:22;3826:2;3907:37;3934:9;3907:37;:::i;3955:718::-;4063:6;4071;4079;4087;4140:3;4128:9;4119:7;4115:23;4111:33;4108:2;;;4162:6;4154;4147:22;4108:2;4207:9;4194:23;4240:18;4232:6;4229:30;4226:2;;;4277:6;4269;4262:22;4226:2;4305:22;;4358:4;4350:13;;4346:27;-1:-1:-1;4336:2:17;;4392:6;4384;4377:22;4336:2;4420:75;4487:7;4482:2;4469:16;4462:4;4458:2;4454:13;4420:75;:::i;:::-;4410:85;;;4542:4;4531:9;4527:20;4514:34;4504:44;;4567:46;4609:2;4598:9;4594:18;4567:46;:::i;:::-;4557:56;;4632:35;4663:2;4652:9;4648:18;4632:35;:::i;:::-;4622:45;;4098:575;;;;;;;:::o;4678:190::-;4737:6;4790:2;4778:9;4769:7;4765:23;4761:32;4758:2;;;4811:6;4803;4796:22;4758:2;-1:-1:-1;4839:23:17;;4748:120;-1:-1:-1;4748:120:17:o;4873:258::-;4941:6;4949;5002:2;4990:9;4981:7;4977:23;4973:32;4970:2;;;5023:6;5015;5008:22;4970:2;-1:-1:-1;;5051:23:17;;;5121:2;5106:18;;;5093:32;;-1:-1:-1;4960:171:17:o;5136:257::-;5177:3;5215:5;5209:12;5242:6;5237:3;5230:19;5258:63;5314:6;5307:4;5302:3;5298:14;5291:4;5284:5;5280:16;5258:63;:::i;:::-;5375:2;5354:15;-1:-1:-1;;5350:29:17;5341:39;;;;5382:4;5337:50;;5185:208;-1:-1:-1;;5185:208:17:o;5398:238::-;5480:1;5473:5;5470:12;5460:2;;5525:10;5520:3;5516:20;5513:1;5506:31;5560:4;5557:1;5550:15;5588:4;5585:1;5578:15;5460:2;5612:18;;5450:186::o;5641:554::-;5724:5;5718:12;5713:3;5706:25;5777:4;5770:5;5766:16;5760:23;5819:1;5815;5810:3;5806:11;5802:19;5871:2;5857:12;5853:21;5846:4;5841:3;5837:14;5830:45;5936:2;5928:4;5921:5;5917:16;5911:23;5907:32;5900:4;5895:3;5891:14;5884:56;;;5989:4;5982:5;5978:16;5972:23;5965:4;5960:3;5956:14;5949:47;6059:4;6052:5;6048:16;6042:23;6035:31;6028:39;6021:4;6016:3;6012:14;6005:63;6116:4;6109:5;6105:16;6099:23;6131:58;6183:4;6178:3;6174:14;6158;6131:58;:::i;6200:470::-;6379:3;6417:6;6411:13;6433:53;6479:6;6474:3;6467:4;6459:6;6455:17;6433:53;:::i;:::-;6549:13;;6508:16;;;;6571:57;6549:13;6508:16;6605:4;6593:17;;6571:57;:::i;:::-;6644:20;;6387:283;-1:-1:-1;;;;6387:283:17:o;7107:578::-;-1:-1:-1;;;;;7445:15:17;;;7427:34;;7497:15;;7492:2;7477:18;;7470:43;7544:2;7529:18;;7522:34;;;7599:14;;7592:22;7587:2;7572:18;;7565:50;7376:3;7361:19;;7624:55;7674:3;7659:19;;7651:6;7624:55;:::i;:::-;7343:342;;;;;;;;:::o;8645:488::-;-1:-1:-1;;;;;8914:15:17;;;8896:34;;8966:15;;8961:2;8946:18;;8939:43;9013:2;8998:18;;8991:34;;;9061:3;9056:2;9041:18;;9034:31;;;8839:4;;9082:45;;9107:19;;9099:6;9082:45;:::i;9138:718::-;9367:2;9419:21;;;9489:13;;9392:18;;;9511:22;;;9338:4;;9367:2;9590:15;;;;9564:2;9549:18;;;9338:4;9636:194;9650:6;9647:1;9644:13;9636:194;;;9699:49;9744:3;9735:6;9729:13;9699:49;:::i;:::-;9805:15;;;;9777:4;9768:14;;;;;9672:1;9665:9;9636:194;;;-1:-1:-1;9847:3:17;;9347:509;-1:-1:-1;;;;;;9347:509:17:o;9861:882::-;10092:2;10144:21;;;10214:13;;10117:18;;;10236:22;;;10063:4;;10092:2;10277;;10295:18;;;;10336:15;;;10063:4;10382:335;10396:6;10393:1;10390:13;10382:335;;;10455:13;;10497:9;;-1:-1:-1;;;;;10493:35:17;10481:48;;10569:11;;;10563:18;10549:12;;;10542:40;10622:11;;10616:18;10602:12;;;10595:40;10664:4;10655:14;;;;10692:15;;;;10525:1;10411:9;10382:335;;;-1:-1:-1;10734:3:17;;10072:671;-1:-1:-1;;;;;;;10072:671:17:o;10940:219::-;11089:2;11078:9;11071:21;11052:4;11109:44;11149:2;11138:9;11134:18;11126:6;11109:44;:::i;11164:409::-;11366:2;11348:21;;;11405:2;11385:18;;;11378:30;11444:34;11439:2;11424:18;;11417:62;-1:-1:-1;;;11510:2:17;11495:18;;11488:43;11563:3;11548:19;;11338:235::o;11938:414::-;12140:2;12122:21;;;12179:2;12159:18;;;12152:30;12218:34;12213:2;12198:18;;12191:62;-1:-1:-1;;;12284:2:17;12269:18;;12262:48;12342:3;12327:19;;12112:240::o;12357:401::-;12559:2;12541:21;;;12598:2;12578:18;;;12571:30;12637:34;12632:2;12617:18;;12610:62;-1:-1:-1;;;12703:2:17;12688:18;;12681:35;12748:3;12733:19;;12531:227::o;16929:406::-;17131:2;17113:21;;;17170:2;17150:18;;;17143:30;17209:34;17204:2;17189:18;;17182:62;-1:-1:-1;;;17275:2:17;17260:18;;17253:40;17325:3;17310:19;;17103:232::o;21028:259::-;21220:3;21205:19;;21233:48;21209:9;21263:6;21233:48;:::i;21474:128::-;21514:3;21545:1;21541:6;21538:1;21535:13;21532:2;;;21551:18;;:::i;:::-;-1:-1:-1;21587:9:17;;21522:80::o;21607:217::-;21647:1;21673;21663:2;;-1:-1:-1;;;21698:31:17;;21752:4;21749:1;21742:15;21780:4;21705:1;21770:15;21663:2;-1:-1:-1;21809:9:17;;21653:171::o;21829:168::-;21869:7;21935:1;21931;21927:6;21923:14;21920:1;21917:21;21912:1;21905:9;21898:17;21894:45;21891:2;;;21942:18;;:::i;:::-;-1:-1:-1;21982:9:17;;21881:116::o;22002:125::-;22042:4;22070:1;22067;22064:8;22061:2;;;22075:18;;:::i;:::-;-1:-1:-1;22112:9:17;;22051:76::o;22132:258::-;22204:1;22214:113;22228:6;22225:1;22222:13;22214:113;;;22304:11;;;22298:18;22285:11;;;22278:39;22250:2;22243:10;22214:113;;;22345:6;22342:1;22339:13;22336:2;;;-1:-1:-1;;22380:1:17;22362:16;;22355:27;22185:205::o;22395:380::-;22474:1;22470:12;;;;22517;;;22538:2;;22592:4;22584:6;22580:17;22570:27;;22538:2;22645;22637:6;22634:14;22614:18;22611:38;22608:2;;;22691:10;22686:3;22682:20;22679:1;22672:31;22726:4;22723:1;22716:15;22754:4;22751:1;22744:15;22608:2;;22450:325;;;:::o;22780:135::-;22819:3;-1:-1:-1;;22840:17:17;;22837:2;;;22860:18;;:::i;:::-;-1:-1:-1;22907:1:17;22896:13;;22827:88::o;22920:127::-;22981:10;22976:3;22972:20;22969:1;22962:31;23012:4;23009:1;23002:15;23036:4;23033:1;23026:15;23052:127;23113:10;23108:3;23104:20;23101:1;23094:31;23144:4;23141:1;23134:15;23168:4;23165:1;23158:15;23184:131;-1:-1:-1;;;;;;23258:32:17;;23248:43;;23238:2;;23305:1;23302;23295:12"
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "createToken(string,uint256,uint8,bool)": "b1b654dd",
              "executeSale(uint256)": "9b1225c4",
              "getAllNFTs()": "e0391b09",
              "getApproved(uint256)": "081812fc",
              "getListPrice()": "68f1945f",
              "getListedTokenForId(uint256)": "8e264590",
              "getMyNFTs()": "629cb2e4",
              "getNFTsByCollection(uint8)": "e22124bc",
              "getTokenHistory(uint256)": "2142ae2c",
              "isApprovedForAll(address,address)": "e985e9c5",
              "listPrice()": "6eb588d9",
              "maxSupply()": "d5abeb01",
              "name()": "06fdde03",
              "owner()": "8da5cb5b",
              "ownerOf(uint256)": "6352211e",
              "resellToken(uint256,uint256)": "e219fc75",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd",
              "transferToken(address,uint256)": "1072cbea",
              "unSellToken(uint256)": "446bb3d8",
              "updateListPrice(uint256)": "c322579c"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"}],\"name\":\"BatchMetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"MetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"currentlyListed\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"enum NFTPromolider.Collection\",\"name\":\"collection\",\"type\":\"uint8\"}],\"name\":\"TokenListedSuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destinationNetwork\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"}],\"name\":\"TokenLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"TokenSaleSuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"TokenUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"enum NFTPromolider.Collection\",\"name\":\"collection\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isList\",\"type\":\"bool\"}],\"name\":\"createToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"executeSale\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllNFTs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"currentlyListed\",\"type\":\"bool\"},{\"internalType\":\"enum NFTPromolider.Collection\",\"name\":\"collection\",\"type\":\"uint8\"}],\"internalType\":\"struct NFTPromolider.ListedToken[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getListPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getListedTokenForId\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"currentlyListed\",\"type\":\"bool\"},{\"internalType\":\"enum NFTPromolider.Collection\",\"name\":\"collection\",\"type\":\"uint8\"}],\"internalType\":\"struct NFTPromolider.ListedToken\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMyNFTs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"currentlyListed\",\"type\":\"bool\"},{\"internalType\":\"enum NFTPromolider.Collection\",\"name\":\"collection\",\"type\":\"uint8\"}],\"internalType\":\"struct NFTPromolider.ListedToken[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum NFTPromolider.Collection\",\"name\":\"collection\",\"type\":\"uint8\"}],\"name\":\"getNFTsByCollection\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"currentlyListed\",\"type\":\"bool\"},{\"internalType\":\"enum NFTPromolider.Collection\",\"name\":\"collection\",\"type\":\"uint8\"}],\"internalType\":\"struct NFTPromolider.ListedToken[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenHistory\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"internalType\":\"struct NFTPromolider.TokenHistory[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"listPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"resellToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"unSellToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_listPrice\",\"type\":\"uint256\"}],\"name\":\"updateListPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/NFTPromolider.sol\":\"NFTPromolider\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xd04b0f06e0666f29cf7cccc82894de541e19bb30a765b107b1e40bb7fe5f7d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b652499d098e88d8d878374616bb58434301061cae2253298b3f374044e0ddb\",\"dweb:/ipfs/QmbhAzctqo5jrSKU6idHdVyqfmzCcDbNUPvmx4GiXxfA6q\"]},\"@openzeppelin/contracts/interfaces/IERC4906.sol\":{\"keccak256\":\"0x2a9dadb806be80dd451821f1f1190eb9aa6f6edae85b185db29d60767cc0c5f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c25cac8dbe5bd96320053d23c3dacdb875e629d7c53ac00892eb7aa8500bde6\",\"dweb:/ipfs/Qmaf2oqbxxdJA9DphAoH4UCb8aXEAVM8fnu6qMxHJ5ta4A\"]},\"@openzeppelin/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xaf297d12d8d4a57fe01a70f0ef38908f208e3faedc577056d0b728fa2f3ccf0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fbfaf37123958822a2720a4ea29651be00edab787540b770f73d3e025d286ff8\",\"dweb:/ipfs/QmbzgWeTm8hJVUqWrNAwFjshqbYVyeGpQA8D1huzxQdmw6\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005\",\"dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol\":{\"keccak256\":\"0x7942989e3525aec1672469e4c65fb33fbd19c785c9cadbcb70fcbe1fe8bfdd37\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c9f260258c2be0e3b75f8ca285872c4bfa3a8fc97fdc2e62366c78abf22b54f\",\"dweb:/ipfs/QmTg1DMNwCDj8NVi6i1noqx7cxuRdPP4VyW4fzDkKAKmH2\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e1c62884d55b70f3ae5432b44bb3166ad71ae3acd19c57ab6ddc3c87c325ee\",\"dweb:/ipfs/QmezuXg5GK5oeA4F91EZhozBFekhq5TD966bHPH18cCqhu\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]},\"contracts/NFTPromolider.sol\":{\"keccak256\":\"0x111c7f71f304a3ab6b6fb5cc615923e0ab435443d0b6c137b562189c48eb83d3\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://749f96d8981de88d0f4c2c6d9b44fd984d435060b485844b3fd69a681fc24ab3\",\"dweb:/ipfs/QmRKdQHK4woaaJidtbe3Nrbh9kAeBMLBu7sTAJn9WRMJSp\"]}},\"version\":1}"
        }
      }
    },
    "errors": [
      {
        "component": "general",
        "errorCode": "6321",
        "formattedMessage": "Warning: Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n   --> @openzeppelin/contracts/utils/Address.sol:200:30:\n    |\n200 |     ) internal view returns (bytes memory) {\n    |                              ^^^^^^^^^^^^\n\n",
        "message": "Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.",
        "severity": "warning",
        "sourceLocation": {
          "end": 7863,
          "file": "@openzeppelin/contracts/utils/Address.sol",
          "start": 7851
        },
        "type": "Warning"
      },
      {
        "component": "general",
        "errorCode": "6321",
        "formattedMessage": "Warning: Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n   --> @openzeppelin/contracts/utils/Address.sol:223:30:\n    |\n223 |     ) internal pure returns (bytes memory) {\n    |                              ^^^^^^^^^^^^\n\n",
        "message": "Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.",
        "severity": "warning",
        "sourceLocation": {
          "end": 8678,
          "file": "@openzeppelin/contracts/utils/Address.sol",
          "start": 8666
        },
        "type": "Warning"
      }
    ],
    "sources": {
      "@openzeppelin/contracts/interfaces/IERC165.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/interfaces/IERC165.sol",
          "exportedSymbols": {
            "IERC165": [
              1962
            ]
          },
          "id": 3,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "91:23:0"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "../utils/introspection/IERC165.sol",
              "id": 2,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3,
              "sourceUnit": 1963,
              "src": "116:44:0",
              "symbolAliases": [],
              "unitAlias": ""
            }
          ],
          "src": "91:70:0"
        },
        "id": 0
      },
      "@openzeppelin/contracts/interfaces/IERC4906.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/interfaces/IERC4906.sol",
          "exportedSymbols": {
            "IERC165": [
              1962
            ],
            "IERC4906": [
              24
            ],
            "IERC721": [
              1070
            ]
          },
          "id": 25,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "107:23:1"
            },
            {
              "absolutePath": "@openzeppelin/contracts/interfaces/IERC165.sol",
              "file": "./IERC165.sol",
              "id": 5,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 25,
              "sourceUnit": 3,
              "src": "132:23:1",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/interfaces/IERC721.sol",
              "file": "./IERC721.sol",
              "id": 6,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 25,
              "sourceUnit": 28,
              "src": "156:23:1",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8,
                    "name": "IERC165",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1962,
                    "src": "248:7:1"
                  },
                  "id": 9,
                  "nodeType": "InheritanceSpecifier",
                  "src": "248:7:1"
                },
                {
                  "baseName": {
                    "id": 10,
                    "name": "IERC721",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1070,
                    "src": "257:7:1"
                  },
                  "id": 11,
                  "nodeType": "InheritanceSpecifier",
                  "src": "257:7:1"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 7,
                "nodeType": "StructuredDocumentation",
                "src": "181:45:1",
                "text": "@title EIP-721 Metadata Update Extension"
              },
              "fullyImplemented": false,
              "id": 24,
              "linearizedBaseContracts": [
                24,
                1070,
                1962
              ],
              "name": "IERC4906",
              "nameLocation": "236:8:1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 12,
                    "nodeType": "StructuredDocumentation",
                    "src": "271:201:1",
                    "text": "@dev This event emits when the metadata of a token is changed.\n So that the third-party platforms such as NFT market could\n timely update the images and related attributes of the NFT."
                  },
                  "id": 16,
                  "name": "MetadataUpdate",
                  "nameLocation": "483:14:1",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 15,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 14,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_tokenId",
                        "nameLocation": "506:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 16,
                        "src": "498:16:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "498:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "497:18:1"
                  },
                  "src": "477:39:1"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 17,
                    "nodeType": "StructuredDocumentation",
                    "src": "522:212:1",
                    "text": "@dev This event emits when the metadata of a range of tokens is changed.\n So that the third-party platforms such as NFT market could\n timely update the images and related attributes of the NFTs."
                  },
                  "id": 23,
                  "name": "BatchMetadataUpdate",
                  "nameLocation": "745:19:1",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 22,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 19,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_fromTokenId",
                        "nameLocation": "773:12:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 23,
                        "src": "765:20:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 18,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "765:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 21,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_toTokenId",
                        "nameLocation": "795:10:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 23,
                        "src": "787:18:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 20,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "787:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "764:42:1"
                  },
                  "src": "739:68:1"
                }
              ],
              "scope": 25,
              "src": "226:583:1",
              "usedErrors": []
            }
          ],
          "src": "107:703:1"
        },
        "id": 1
      },
      "@openzeppelin/contracts/interfaces/IERC721.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/interfaces/IERC721.sol",
          "exportedSymbols": {
            "IERC165": [
              1962
            ],
            "IERC721": [
              1070
            ]
          },
          "id": 28,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 26,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "91:23:2"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "../token/ERC721/IERC721.sol",
              "id": 27,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 28,
              "sourceUnit": 1071,
              "src": "116:37:2",
              "symbolAliases": [],
              "unitAlias": ""
            }
          ],
          "src": "91:63:2"
        },
        "id": 2
      },
      "@openzeppelin/contracts/token/ERC721/ERC721.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
          "exportedSymbols": {
            "Address": [
              1601
            ],
            "Context": [
              1623
            ],
            "ERC165": [
              1950
            ],
            "ERC721": [
              954
            ],
            "IERC165": [
              1962
            ],
            "IERC721": [
              1070
            ],
            "IERC721Metadata": [
              1271
            ],
            "IERC721Receiver": [
              1088
            ],
            "Math": [
              2828
            ],
            "SignedMath": [
              2933
            ],
            "Strings": [
              1926
            ]
          },
          "id": 955,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 29,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "107:23:3"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "./IERC721.sol",
              "id": 30,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 955,
              "sourceUnit": 1071,
              "src": "132:23:3",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
              "file": "./IERC721Receiver.sol",
              "id": 31,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 955,
              "sourceUnit": 1089,
              "src": "156:31:3",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
              "file": "./extensions/IERC721Metadata.sol",
              "id": 32,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 955,
              "sourceUnit": 1272,
              "src": "188:42:3",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
              "file": "../../utils/Address.sol",
              "id": 33,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 955,
              "sourceUnit": 1602,
              "src": "231:33:3",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
              "file": "../../utils/Context.sol",
              "id": 34,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 955,
              "sourceUnit": 1624,
              "src": "265:33:3",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
              "file": "../../utils/Strings.sol",
              "id": 35,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 955,
              "sourceUnit": 1927,
              "src": "299:33:3",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
              "file": "../../utils/introspection/ERC165.sol",
              "id": 36,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 955,
              "sourceUnit": 1951,
              "src": "333:46:3",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 38,
                    "name": "Context",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1623,
                    "src": "647:7:3"
                  },
                  "id": 39,
                  "nodeType": "InheritanceSpecifier",
                  "src": "647:7:3"
                },
                {
                  "baseName": {
                    "id": 40,
                    "name": "ERC165",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1950,
                    "src": "656:6:3"
                  },
                  "id": 41,
                  "nodeType": "InheritanceSpecifier",
                  "src": "656:6:3"
                },
                {
                  "baseName": {
                    "id": 42,
                    "name": "IERC721",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1070,
                    "src": "664:7:3"
                  },
                  "id": 43,
                  "nodeType": "InheritanceSpecifier",
                  "src": "664:7:3"
                },
                {
                  "baseName": {
                    "id": 44,
                    "name": "IERC721Metadata",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1271,
                    "src": "673:15:3"
                  },
                  "id": 45,
                  "nodeType": "InheritanceSpecifier",
                  "src": "673:15:3"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 37,
                "nodeType": "StructuredDocumentation",
                "src": "381:246:3",
                "text": " @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n the Metadata extension, but not including the Enumerable extension, which is available separately as\n {ERC721Enumerable}."
              },
              "fullyImplemented": true,
              "id": 954,
              "linearizedBaseContracts": [
                954,
                1271,
                1070,
                1950,
                1962,
                1623
              ],
              "name": "ERC721",
              "nameLocation": "637:6:3",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 48,
                  "libraryName": {
                    "id": 46,
                    "name": "Address",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1601,
                    "src": "701:7:3"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "695:26:3",
                  "typeName": {
                    "id": 47,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "713:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                },
                {
                  "id": 51,
                  "libraryName": {
                    "id": 49,
                    "name": "Strings",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1926,
                    "src": "732:7:3"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "726:26:3",
                  "typeName": {
                    "id": 50,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "744:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 53,
                  "mutability": "mutable",
                  "name": "_name",
                  "nameLocation": "791:5:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "776:20:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 52,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "776:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 55,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nameLocation": "838:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "823:22:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 54,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "823:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 59,
                  "mutability": "mutable",
                  "name": "_owners",
                  "nameLocation": "934:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "898:43:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                    "typeString": "mapping(uint256 => address)"
                  },
                  "typeName": {
                    "id": 58,
                    "keyType": {
                      "id": 56,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "906:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "898:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                      "typeString": "mapping(uint256 => address)"
                    },
                    "valueType": {
                      "id": 57,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "917:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 63,
                  "mutability": "mutable",
                  "name": "_balances",
                  "nameLocation": "1028:9:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "992:45:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 62,
                    "keyType": {
                      "id": 60,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1000:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "992:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 61,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1011:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 67,
                  "mutability": "mutable",
                  "name": "_tokenApprovals",
                  "nameLocation": "1129:15:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "1093:51:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                    "typeString": "mapping(uint256 => address)"
                  },
                  "typeName": {
                    "id": 66,
                    "keyType": {
                      "id": 64,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1101:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1093:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                      "typeString": "mapping(uint256 => address)"
                    },
                    "valueType": {
                      "id": 65,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1112:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 73,
                  "mutability": "mutable",
                  "name": "_operatorApprovals",
                  "nameLocation": "1252:18:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "1199:71:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                    "typeString": "mapping(address => mapping(address => bool))"
                  },
                  "typeName": {
                    "id": 72,
                    "keyType": {
                      "id": 68,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1207:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1199:44:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                      "typeString": "mapping(address => mapping(address => bool))"
                    },
                    "valueType": {
                      "id": 71,
                      "keyType": {
                        "id": 69,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1226:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "1218:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      },
                      "valueType": {
                        "id": 70,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1237:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 89,
                    "nodeType": "Block",
                    "src": "1446:57:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 83,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 81,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53,
                            "src": "1456:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 82,
                            "name": "name_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 76,
                            "src": "1464:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "1456:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 84,
                        "nodeType": "ExpressionStatement",
                        "src": "1456:13:3"
                      },
                      {
                        "expression": {
                          "id": 87,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 85,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55,
                            "src": "1479:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 86,
                            "name": "symbol_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 78,
                            "src": "1489:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "1479:17:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 88,
                        "nodeType": "ExpressionStatement",
                        "src": "1479:17:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 74,
                    "nodeType": "StructuredDocumentation",
                    "src": "1277:108:3",
                    "text": " @dev Initializes the contract by setting a `name` and a `symbol` to the token collection."
                  },
                  "id": 90,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 79,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 76,
                        "mutability": "mutable",
                        "name": "name_",
                        "nameLocation": "1416:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 90,
                        "src": "1402:19:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 75,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1402:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 78,
                        "mutability": "mutable",
                        "name": "symbol_",
                        "nameLocation": "1437:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 90,
                        "src": "1423:21:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 77,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1423:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1401:44:3"
                  },
                  "returnParameters": {
                    "id": 80,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1446:0:3"
                  },
                  "scope": 954,
                  "src": "1390:113:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1949,
                    1961
                  ],
                  "body": {
                    "id": 120,
                    "nodeType": "Block",
                    "src": "1678:192:3",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 113,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 106,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 101,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 93,
                                "src": "1707:11:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 103,
                                      "name": "IERC721",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1070,
                                      "src": "1727:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721_$1070_$",
                                        "typeString": "type(contract IERC721)"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721_$1070_$",
                                        "typeString": "type(contract IERC721)"
                                      }
                                    ],
                                    "id": 102,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "1722:4:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 104,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1722:13:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721_$1070",
                                    "typeString": "type(contract IERC721)"
                                  }
                                },
                                "id": 105,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "interfaceId",
                                "nodeType": "MemberAccess",
                                "src": "1722:25:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "1707:40:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 112,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 107,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 93,
                                "src": "1763:11:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 109,
                                      "name": "IERC721Metadata",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1271,
                                      "src": "1783:15:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$1271_$",
                                        "typeString": "type(contract IERC721Metadata)"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$1271_$",
                                        "typeString": "type(contract IERC721Metadata)"
                                      }
                                    ],
                                    "id": 108,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "1778:4:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 110,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1778:21:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721Metadata_$1271",
                                    "typeString": "type(contract IERC721Metadata)"
                                  }
                                },
                                "id": 111,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "interfaceId",
                                "nodeType": "MemberAccess",
                                "src": "1778:33:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "1763:48:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "1707:104:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 116,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 93,
                                "src": "1851:11:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "id": 114,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "1827:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_super$_ERC721_$954_$",
                                  "typeString": "type(contract super ERC721)"
                                }
                              },
                              "id": 115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "supportsInterface",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1949,
                              "src": "1827:23:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                "typeString": "function (bytes4) view returns (bool)"
                              }
                            },
                            "id": 117,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1827:36:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1707:156:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 100,
                        "id": 119,
                        "nodeType": "Return",
                        "src": "1688:175:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 91,
                    "nodeType": "StructuredDocumentation",
                    "src": "1509:56:3",
                    "text": " @dev See {IERC165-supportsInterface}."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 121,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "1579:17:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 97,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 95,
                        "name": "ERC165",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1950,
                        "src": "1646:6:3"
                      },
                      {
                        "id": 96,
                        "name": "IERC165",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1962,
                        "src": "1654:7:3"
                      }
                    ],
                    "src": "1637:25:3"
                  },
                  "parameters": {
                    "id": 94,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 93,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "1604:11:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 121,
                        "src": "1597:18:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 92,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "1597:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1596:20:3"
                  },
                  "returnParameters": {
                    "id": 100,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 99,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 121,
                        "src": "1672:4:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 98,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1672:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1671:6:3"
                  },
                  "scope": 954,
                  "src": "1570:300:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    995
                  ],
                  "body": {
                    "id": 144,
                    "nodeType": "Block",
                    "src": "2010:123:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 131,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 124,
                                "src": "2028:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 134,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2045:1:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 133,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2037:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 132,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2037:7:3",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 135,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2037:10:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2028:19:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a2061646472657373207a65726f206973206e6f7420612076616c6964206f776e6572",
                              "id": 137,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2049:43:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159",
                                "typeString": "literal_string \"ERC721: address zero is not a valid owner\""
                              },
                              "value": "ERC721: address zero is not a valid owner"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159",
                                "typeString": "literal_string \"ERC721: address zero is not a valid owner\""
                              }
                            ],
                            "id": 130,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2020:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 138,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2020:73:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 139,
                        "nodeType": "ExpressionStatement",
                        "src": "2020:73:3"
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 140,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63,
                            "src": "2110:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 142,
                          "indexExpression": {
                            "id": 141,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "2120:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2110:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 129,
                        "id": 143,
                        "nodeType": "Return",
                        "src": "2103:23:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 122,
                    "nodeType": "StructuredDocumentation",
                    "src": "1876:48:3",
                    "text": " @dev See {IERC721-balanceOf}."
                  },
                  "functionSelector": "70a08231",
                  "id": 145,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "1938:9:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 126,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1983:8:3"
                  },
                  "parameters": {
                    "id": 125,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 124,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1956:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 145,
                        "src": "1948:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 123,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1948:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1947:15:3"
                  },
                  "returnParameters": {
                    "id": 129,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 128,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 145,
                        "src": "2001:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 127,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2001:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2000:9:3"
                  },
                  "scope": 954,
                  "src": "1929:204:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1003
                  ],
                  "body": {
                    "id": 172,
                    "nodeType": "Block",
                    "src": "2271:138:3",
                    "statements": [
                      {
                        "assignments": [
                          155
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 155,
                            "mutability": "mutable",
                            "name": "owner",
                            "nameLocation": "2289:5:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 172,
                            "src": "2281:13:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 154,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2281:7:3",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 159,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 157,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 148,
                              "src": "2306:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 156,
                            "name": "_ownerOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 455,
                            "src": "2297:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2297:17:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2281:33:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 166,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 161,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 155,
                                "src": "2332:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 164,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2349:1:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 163,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2341:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 162,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2341:7:3",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 165,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2341:10:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2332:19:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a20696e76616c696420746f6b656e204944",
                              "id": 167,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2353:26:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f",
                                "typeString": "literal_string \"ERC721: invalid token ID\""
                              },
                              "value": "ERC721: invalid token ID"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f",
                                "typeString": "literal_string \"ERC721: invalid token ID\""
                              }
                            ],
                            "id": 160,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2324:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2324:56:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 169,
                        "nodeType": "ExpressionStatement",
                        "src": "2324:56:3"
                      },
                      {
                        "expression": {
                          "id": 170,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 155,
                          "src": "2397:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 153,
                        "id": 171,
                        "nodeType": "Return",
                        "src": "2390:12:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 146,
                    "nodeType": "StructuredDocumentation",
                    "src": "2139:46:3",
                    "text": " @dev See {IERC721-ownerOf}."
                  },
                  "functionSelector": "6352211e",
                  "id": 173,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ownerOf",
                  "nameLocation": "2199:7:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 150,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2244:8:3"
                  },
                  "parameters": {
                    "id": 149,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 148,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2215:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 173,
                        "src": "2207:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 147,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2207:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2206:17:3"
                  },
                  "returnParameters": {
                    "id": 153,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 152,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 173,
                        "src": "2262:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 151,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2262:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2261:9:3"
                  },
                  "scope": 954,
                  "src": "2190:219:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1256
                  ],
                  "body": {
                    "id": 182,
                    "nodeType": "Block",
                    "src": "2540:29:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 180,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53,
                          "src": "2557:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 179,
                        "id": 181,
                        "nodeType": "Return",
                        "src": "2550:12:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 174,
                    "nodeType": "StructuredDocumentation",
                    "src": "2415:51:3",
                    "text": " @dev See {IERC721Metadata-name}."
                  },
                  "functionSelector": "06fdde03",
                  "id": 183,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nameLocation": "2480:4:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 176,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2507:8:3"
                  },
                  "parameters": {
                    "id": 175,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2484:2:3"
                  },
                  "returnParameters": {
                    "id": 179,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 178,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 183,
                        "src": "2525:13:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 177,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2525:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2524:15:3"
                  },
                  "scope": 954,
                  "src": "2471:98:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1262
                  ],
                  "body": {
                    "id": 192,
                    "nodeType": "Block",
                    "src": "2704:31:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 190,
                          "name": "_symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 55,
                          "src": "2721:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 189,
                        "id": 191,
                        "nodeType": "Return",
                        "src": "2714:14:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 184,
                    "nodeType": "StructuredDocumentation",
                    "src": "2575:53:3",
                    "text": " @dev See {IERC721Metadata-symbol}."
                  },
                  "functionSelector": "95d89b41",
                  "id": 193,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nameLocation": "2642:6:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 186,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2671:8:3"
                  },
                  "parameters": {
                    "id": 185,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2648:2:3"
                  },
                  "returnParameters": {
                    "id": 189,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 188,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 193,
                        "src": "2689:13:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 187,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2689:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2688:15:3"
                  },
                  "scope": 954,
                  "src": "2633:102:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1270
                  ],
                  "body": {
                    "id": 231,
                    "nodeType": "Block",
                    "src": "2889:188:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 203,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 196,
                              "src": "2914:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 202,
                            "name": "_requireMinted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 850,
                            "src": "2899:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$__$",
                              "typeString": "function (uint256) view"
                            }
                          },
                          "id": 204,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2899:23:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 205,
                        "nodeType": "ExpressionStatement",
                        "src": "2899:23:3"
                      },
                      {
                        "assignments": [
                          207
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 207,
                            "mutability": "mutable",
                            "name": "baseURI",
                            "nameLocation": "2947:7:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 231,
                            "src": "2933:21:3",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 206,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "2933:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 210,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 208,
                            "name": "_baseURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 241,
                            "src": "2957:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$",
                              "typeString": "function () view returns (string memory)"
                            }
                          },
                          "id": 209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2957:10:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2933:34:3"
                      },
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 217,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 213,
                                    "name": "baseURI",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 207,
                                    "src": "2990:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 212,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2984:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 211,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2984:5:3",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 214,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2984:14:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 215,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "2984:21:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 216,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3008:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "2984:25:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "hexValue": "",
                            "id": 228,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3068:2:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            },
                            "value": ""
                          },
                          "id": 229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "2984:86:3",
                          "trueExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 222,
                                    "name": "baseURI",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 207,
                                    "src": "3036:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "id": 223,
                                        "name": "tokenId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 196,
                                        "src": "3045:7:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 224,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toString",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 1756,
                                      "src": "3045:16:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (string memory)"
                                      }
                                    },
                                    "id": 225,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3045:18:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 220,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "3019:3:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 221,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "3019:16:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 226,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3019:45:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 219,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3012:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                "typeString": "type(string storage pointer)"
                              },
                              "typeName": {
                                "id": 218,
                                "name": "string",
                                "nodeType": "ElementaryTypeName",
                                "src": "3012:6:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 227,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3012:53:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 201,
                        "id": 230,
                        "nodeType": "Return",
                        "src": "2977:93:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 194,
                    "nodeType": "StructuredDocumentation",
                    "src": "2741:55:3",
                    "text": " @dev See {IERC721Metadata-tokenURI}."
                  },
                  "functionSelector": "c87b56dd",
                  "id": 232,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenURI",
                  "nameLocation": "2810:8:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 198,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2856:8:3"
                  },
                  "parameters": {
                    "id": 197,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 196,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2827:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 232,
                        "src": "2819:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 195,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2819:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2818:17:3"
                  },
                  "returnParameters": {
                    "id": 201,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 200,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 232,
                        "src": "2874:13:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 199,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2874:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2873:15:3"
                  },
                  "scope": 954,
                  "src": "2801:276:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 240,
                    "nodeType": "Block",
                    "src": "3385:26:3",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "",
                          "id": 238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3402:2:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          },
                          "value": ""
                        },
                        "functionReturnParameters": 237,
                        "id": 239,
                        "nodeType": "Return",
                        "src": "3395:9:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 233,
                    "nodeType": "StructuredDocumentation",
                    "src": "3083:231:3",
                    "text": " @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n by default, can be overridden in child contracts."
                  },
                  "id": 241,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_baseURI",
                  "nameLocation": "3328:8:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 234,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3336:2:3"
                  },
                  "returnParameters": {
                    "id": 237,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 236,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 241,
                        "src": "3370:13:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 235,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3370:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3369:15:3"
                  },
                  "scope": 954,
                  "src": "3319:92:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1043
                  ],
                  "body": {
                    "id": 283,
                    "nodeType": "Block",
                    "src": "3538:336:3",
                    "statements": [
                      {
                        "assignments": [
                          251
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 251,
                            "mutability": "mutable",
                            "name": "owner",
                            "nameLocation": "3556:5:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 283,
                            "src": "3548:13:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 250,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3548:7:3",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 256,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 254,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 246,
                              "src": "3579:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 252,
                              "name": "ERC721",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 954,
                              "src": "3564:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC721_$954_$",
                                "typeString": "type(contract ERC721)"
                              }
                            },
                            "id": 253,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "ownerOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 173,
                            "src": "3564:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3564:23:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3548:39:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 260,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 258,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 244,
                                "src": "3605:2:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 259,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 251,
                                "src": "3611:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "3605:11:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a20617070726f76616c20746f2063757272656e74206f776e6572",
                              "id": 261,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3618:35:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
                                "typeString": "literal_string \"ERC721: approval to current owner\""
                              },
                              "value": "ERC721: approval to current owner"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
                                "typeString": "literal_string \"ERC721: approval to current owner\""
                              }
                            ],
                            "id": 257,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3597:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3597:57:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 263,
                        "nodeType": "ExpressionStatement",
                        "src": "3597:57:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 274,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 268,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 265,
                                    "name": "_msgSender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1613,
                                    "src": "3686:10:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                      "typeString": "function () view returns (address)"
                                    }
                                  },
                                  "id": 266,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3686:12:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 267,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 251,
                                  "src": "3702:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "3686:21:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "id": 270,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 251,
                                    "src": "3728:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 271,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1613,
                                      "src": "3735:10:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                        "typeString": "function () view returns (address)"
                                      }
                                    },
                                    "id": 272,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3735:12:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 269,
                                  "name": "isApprovedForAll",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 337,
                                  "src": "3711:16:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                                    "typeString": "function (address,address) view returns (bool)"
                                  }
                                },
                                "id": 273,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3711:37:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "3686:62:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c",
                              "id": 275,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3762:63:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83",
                                "typeString": "literal_string \"ERC721: approve caller is not token owner or approved for all\""
                              },
                              "value": "ERC721: approve caller is not token owner or approved for all"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83",
                                "typeString": "literal_string \"ERC721: approve caller is not token owner or approved for all\""
                              }
                            ],
                            "id": 264,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3665:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3665:170:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 277,
                        "nodeType": "ExpressionStatement",
                        "src": "3665:170:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 279,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 244,
                              "src": "3855:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 280,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 246,
                              "src": "3859:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 278,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 804,
                            "src": "3846:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3846:21:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 282,
                        "nodeType": "ExpressionStatement",
                        "src": "3846:21:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 242,
                    "nodeType": "StructuredDocumentation",
                    "src": "3417:46:3",
                    "text": " @dev See {IERC721-approve}."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 284,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "3477:7:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 248,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3529:8:3"
                  },
                  "parameters": {
                    "id": 247,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 244,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "3493:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 284,
                        "src": "3485:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 243,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3485:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 246,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3505:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 284,
                        "src": "3497:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 245,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3497:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3484:29:3"
                  },
                  "returnParameters": {
                    "id": 249,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3538:0:3"
                  },
                  "scope": 954,
                  "src": "3468:406:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1059
                  ],
                  "body": {
                    "id": 301,
                    "nodeType": "Block",
                    "src": "4020:82:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 294,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 287,
                              "src": "4045:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 293,
                            "name": "_requireMinted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 850,
                            "src": "4030:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$__$",
                              "typeString": "function (uint256) view"
                            }
                          },
                          "id": 295,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4030:23:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 296,
                        "nodeType": "ExpressionStatement",
                        "src": "4030:23:3"
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 297,
                            "name": "_tokenApprovals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67,
                            "src": "4071:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 299,
                          "indexExpression": {
                            "id": 298,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 287,
                            "src": "4087:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4071:24:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 292,
                        "id": 300,
                        "nodeType": "Return",
                        "src": "4064:31:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 285,
                    "nodeType": "StructuredDocumentation",
                    "src": "3880:50:3",
                    "text": " @dev See {IERC721-getApproved}."
                  },
                  "functionSelector": "081812fc",
                  "id": 302,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getApproved",
                  "nameLocation": "3944:11:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 289,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3993:8:3"
                  },
                  "parameters": {
                    "id": 288,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 287,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3964:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 302,
                        "src": "3956:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 286,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3956:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3955:17:3"
                  },
                  "returnParameters": {
                    "id": 292,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 291,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 302,
                        "src": "4011:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 290,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4011:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4010:9:3"
                  },
                  "scope": 954,
                  "src": "3935:167:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1051
                  ],
                  "body": {
                    "id": 318,
                    "nodeType": "Block",
                    "src": "4253:69:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 312,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1613,
                                "src": "4282:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 313,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4282:12:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 314,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 305,
                              "src": "4296:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 315,
                              "name": "approved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 307,
                              "src": "4306:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 311,
                            "name": "_setApprovalForAll",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 836,
                            "src": "4263:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,address,bool)"
                            }
                          },
                          "id": 316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4263:52:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 317,
                        "nodeType": "ExpressionStatement",
                        "src": "4263:52:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 303,
                    "nodeType": "StructuredDocumentation",
                    "src": "4108:56:3",
                    "text": " @dev See {IERC721-setApprovalForAll}."
                  },
                  "functionSelector": "a22cb465",
                  "id": 319,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovalForAll",
                  "nameLocation": "4178:17:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 309,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4244:8:3"
                  },
                  "parameters": {
                    "id": 308,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 305,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4204:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 319,
                        "src": "4196:16:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 304,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4196:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 307,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "4219:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 319,
                        "src": "4214:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 306,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4214:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4195:33:3"
                  },
                  "returnParameters": {
                    "id": 310,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4253:0:3"
                  },
                  "scope": 954,
                  "src": "4169:153:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1069
                  ],
                  "body": {
                    "id": 336,
                    "nodeType": "Block",
                    "src": "4491:59:3",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 330,
                              "name": "_operatorApprovals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 73,
                              "src": "4508:18:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                "typeString": "mapping(address => mapping(address => bool))"
                              }
                            },
                            "id": 332,
                            "indexExpression": {
                              "id": 331,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 322,
                              "src": "4527:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4508:25:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 334,
                          "indexExpression": {
                            "id": 333,
                            "name": "operator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 324,
                            "src": "4534:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4508:35:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 329,
                        "id": 335,
                        "nodeType": "Return",
                        "src": "4501:42:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 320,
                    "nodeType": "StructuredDocumentation",
                    "src": "4328:55:3",
                    "text": " @dev See {IERC721-isApprovedForAll}."
                  },
                  "functionSelector": "e985e9c5",
                  "id": 337,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isApprovedForAll",
                  "nameLocation": "4397:16:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 326,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4467:8:3"
                  },
                  "parameters": {
                    "id": 325,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 322,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "4422:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 337,
                        "src": "4414:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 321,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4414:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 324,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4437:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 337,
                        "src": "4429:16:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 323,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4429:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4413:33:3"
                  },
                  "returnParameters": {
                    "id": 329,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 328,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 337,
                        "src": "4485:4:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 327,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4485:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4484:6:3"
                  },
                  "scope": 954,
                  "src": "4388:162:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1035
                  ],
                  "body": {
                    "id": 363,
                    "nodeType": "Block",
                    "src": "4701:207:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 350,
                                    "name": "_msgSender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1613,
                                    "src": "4790:10:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                      "typeString": "function () view returns (address)"
                                    }
                                  },
                                  "id": 351,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4790:12:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 352,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 344,
                                  "src": "4804:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 349,
                                "name": "_isApprovedOrOwner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 507,
                                "src": "4771:18:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) view returns (bool)"
                                }
                              },
                              "id": 353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4771:41:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6572206f7220617070726f766564",
                              "id": 354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4814:47:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af",
                                "typeString": "literal_string \"ERC721: caller is not token owner or approved\""
                              },
                              "value": "ERC721: caller is not token owner or approved"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af",
                                "typeString": "literal_string \"ERC721: caller is not token owner or approved\""
                              }
                            ],
                            "id": 348,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4763:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 355,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4763:99:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 356,
                        "nodeType": "ExpressionStatement",
                        "src": "4763:99:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 358,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 340,
                              "src": "4883:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 359,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 342,
                              "src": "4889:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 360,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 344,
                              "src": "4893:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 357,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 780,
                            "src": "4873:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4873:28:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 362,
                        "nodeType": "ExpressionStatement",
                        "src": "4873:28:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 338,
                    "nodeType": "StructuredDocumentation",
                    "src": "4556:51:3",
                    "text": " @dev See {IERC721-transferFrom}."
                  },
                  "functionSelector": "23b872dd",
                  "id": 364,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "4621:12:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 346,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4692:8:3"
                  },
                  "parameters": {
                    "id": 345,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 340,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "4642:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 364,
                        "src": "4634:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 339,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4634:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 342,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4656:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 364,
                        "src": "4648:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 341,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4648:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 344,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4668:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 364,
                        "src": "4660:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 343,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4660:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4633:43:3"
                  },
                  "returnParameters": {
                    "id": 347,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4701:0:3"
                  },
                  "scope": 954,
                  "src": "4612:296:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1025
                  ],
                  "body": {
                    "id": 382,
                    "nodeType": "Block",
                    "src": "5067:56:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 376,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 367,
                              "src": "5094:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 377,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 369,
                              "src": "5100:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 378,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 371,
                              "src": "5104:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 379,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5113:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 375,
                            "name": "safeTransferFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              383,
                              413
                            ],
                            "referencedDeclaration": 413,
                            "src": "5077:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,bytes memory)"
                            }
                          },
                          "id": 380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5077:39:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 381,
                        "nodeType": "ExpressionStatement",
                        "src": "5077:39:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 365,
                    "nodeType": "StructuredDocumentation",
                    "src": "4914:55:3",
                    "text": " @dev See {IERC721-safeTransferFrom}."
                  },
                  "functionSelector": "42842e0e",
                  "id": 383,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "4983:16:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 373,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "5058:8:3"
                  },
                  "parameters": {
                    "id": 372,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 367,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "5008:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 383,
                        "src": "5000:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 366,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5000:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 369,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "5022:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 383,
                        "src": "5014:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 368,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5014:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 371,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "5034:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 383,
                        "src": "5026:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 370,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5026:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4999:43:3"
                  },
                  "returnParameters": {
                    "id": 374,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5067:0:3"
                  },
                  "scope": 954,
                  "src": "4974:149:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1015
                  ],
                  "body": {
                    "id": 412,
                    "nodeType": "Block",
                    "src": "5301:164:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 398,
                                    "name": "_msgSender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1613,
                                    "src": "5338:10:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                      "typeString": "function () view returns (address)"
                                    }
                                  },
                                  "id": 399,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5338:12:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 400,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 390,
                                  "src": "5352:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 397,
                                "name": "_isApprovedOrOwner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 507,
                                "src": "5319:18:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) view returns (bool)"
                                }
                              },
                              "id": 401,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5319:41:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6572206f7220617070726f766564",
                              "id": 402,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5362:47:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af",
                                "typeString": "literal_string \"ERC721: caller is not token owner or approved\""
                              },
                              "value": "ERC721: caller is not token owner or approved"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af",
                                "typeString": "literal_string \"ERC721: caller is not token owner or approved\""
                              }
                            ],
                            "id": 396,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5311:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5311:99:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 404,
                        "nodeType": "ExpressionStatement",
                        "src": "5311:99:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 406,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 386,
                              "src": "5434:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 407,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 388,
                              "src": "5440:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 408,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 390,
                              "src": "5444:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 409,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 392,
                              "src": "5453:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 405,
                            "name": "_safeTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 442,
                            "src": "5420:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,bytes memory)"
                            }
                          },
                          "id": 410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5420:38:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 411,
                        "nodeType": "ExpressionStatement",
                        "src": "5420:38:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 384,
                    "nodeType": "StructuredDocumentation",
                    "src": "5129:55:3",
                    "text": " @dev See {IERC721-safeTransferFrom}."
                  },
                  "functionSelector": "b88d4fde",
                  "id": 413,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "5198:16:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 394,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "5292:8:3"
                  },
                  "parameters": {
                    "id": 393,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 386,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "5223:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 413,
                        "src": "5215:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 385,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5215:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 388,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "5237:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 413,
                        "src": "5229:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 387,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5229:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 390,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "5249:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 413,
                        "src": "5241:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 389,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5241:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 392,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "5271:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 413,
                        "src": "5258:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 391,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5258:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5214:62:3"
                  },
                  "returnParameters": {
                    "id": 395,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5301:0:3"
                  },
                  "scope": 954,
                  "src": "5189:276:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 441,
                    "nodeType": "Block",
                    "src": "6428:165:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 426,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 416,
                              "src": "6448:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 427,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 418,
                              "src": "6454:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 428,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 420,
                              "src": "6458:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 425,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 780,
                            "src": "6438:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 429,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6438:28:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 430,
                        "nodeType": "ExpressionStatement",
                        "src": "6438:28:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 433,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 416,
                                  "src": "6507:4:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 434,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 418,
                                  "src": "6513:2:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 435,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 420,
                                  "src": "6517:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 436,
                                  "name": "data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 422,
                                  "src": "6526:4:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 432,
                                "name": "_checkOnERC721Received",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 912,
                                "src": "6484:22:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
                                }
                              },
                              "id": 437,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6484:47:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                              "id": 438,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6533:52:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                                "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                              },
                              "value": "ERC721: transfer to non ERC721Receiver implementer"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                                "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                              }
                            ],
                            "id": 431,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6476:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 439,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6476:110:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 440,
                        "nodeType": "ExpressionStatement",
                        "src": "6476:110:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 414,
                    "nodeType": "StructuredDocumentation",
                    "src": "5471:850:3",
                    "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n `data` is additional data, it has no specified format and it is sent in call to `to`.\n This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n implement alternative mechanisms to perform token transfer, such as signature-based.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                  },
                  "id": 442,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeTransfer",
                  "nameLocation": "6335:13:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 423,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 416,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "6357:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 442,
                        "src": "6349:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 415,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6349:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 418,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "6371:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 442,
                        "src": "6363:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 417,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6363:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 420,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "6383:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 442,
                        "src": "6375:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 419,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6375:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 422,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "6405:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 442,
                        "src": "6392:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 421,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6392:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6348:62:3"
                  },
                  "returnParameters": {
                    "id": 424,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6428:0:3"
                  },
                  "scope": 954,
                  "src": "6326:267:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 454,
                    "nodeType": "Block",
                    "src": "6777:40:3",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 450,
                            "name": "_owners",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59,
                            "src": "6794:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 452,
                          "indexExpression": {
                            "id": 451,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 445,
                            "src": "6802:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6794:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 449,
                        "id": 453,
                        "nodeType": "Return",
                        "src": "6787:23:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 443,
                    "nodeType": "StructuredDocumentation",
                    "src": "6599:98:3",
                    "text": " @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist"
                  },
                  "id": 455,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_ownerOf",
                  "nameLocation": "6711:8:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 446,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 445,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "6728:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 455,
                        "src": "6720:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 444,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6720:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6719:17:3"
                  },
                  "returnParameters": {
                    "id": 449,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 448,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 455,
                        "src": "6768:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 447,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6768:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6767:9:3"
                  },
                  "scope": 954,
                  "src": "6702:115:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 472,
                    "nodeType": "Block",
                    "src": "7191:55:3",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 464,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 458,
                                "src": "7217:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 463,
                              "name": "_ownerOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 455,
                              "src": "7208:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                "typeString": "function (uint256) view returns (address)"
                              }
                            },
                            "id": 465,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7208:17:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 468,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7237:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 467,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7229:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 466,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "7229:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 469,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7229:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "7208:31:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 462,
                        "id": 471,
                        "nodeType": "Return",
                        "src": "7201:38:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 456,
                    "nodeType": "StructuredDocumentation",
                    "src": "6823:292:3",
                    "text": " @dev Returns whether `tokenId` exists.\n Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n Tokens start existing when they are minted (`_mint`),\n and stop existing when they are burned (`_burn`)."
                  },
                  "id": 473,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_exists",
                  "nameLocation": "7129:7:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 459,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 458,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "7145:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 473,
                        "src": "7137:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 457,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7137:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7136:17:3"
                  },
                  "returnParameters": {
                    "id": 462,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 461,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 473,
                        "src": "7185:4:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 460,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7185:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7184:6:3"
                  },
                  "scope": 954,
                  "src": "7120:126:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 506,
                    "nodeType": "Block",
                    "src": "7503:162:3",
                    "statements": [
                      {
                        "assignments": [
                          484
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 484,
                            "mutability": "mutable",
                            "name": "owner",
                            "nameLocation": "7521:5:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 506,
                            "src": "7513:13:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 483,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7513:7:3",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 489,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 487,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 478,
                              "src": "7544:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 485,
                              "name": "ERC721",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 954,
                              "src": "7529:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC721_$954_$",
                                "typeString": "type(contract ERC721)"
                              }
                            },
                            "id": 486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "ownerOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 173,
                            "src": "7529:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 488,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7529:23:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7513:39:3"
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 503,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 497,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 492,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 490,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 476,
                                    "src": "7570:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "id": 491,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 484,
                                    "src": "7581:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "7570:16:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "id": 494,
                                      "name": "owner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 484,
                                      "src": "7607:5:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 495,
                                      "name": "spender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 476,
                                      "src": "7614:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 493,
                                    "name": "isApprovedForAll",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 337,
                                    "src": "7590:16:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                                      "typeString": "function (address,address) view returns (bool)"
                                    }
                                  },
                                  "id": 496,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7590:32:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "7570:52:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 502,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 499,
                                      "name": "tokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 478,
                                      "src": "7638:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 498,
                                    "name": "getApproved",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 302,
                                    "src": "7626:11:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                      "typeString": "function (uint256) view returns (address)"
                                    }
                                  },
                                  "id": 500,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7626:20:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 501,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 476,
                                  "src": "7650:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "7626:31:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "7570:87:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 504,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "7569:89:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 482,
                        "id": 505,
                        "nodeType": "Return",
                        "src": "7562:96:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 474,
                    "nodeType": "StructuredDocumentation",
                    "src": "7252:147:3",
                    "text": " @dev Returns whether `spender` is allowed to manage `tokenId`.\n Requirements:\n - `tokenId` must exist."
                  },
                  "id": 507,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isApprovedOrOwner",
                  "nameLocation": "7413:18:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 479,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 476,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "7440:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 507,
                        "src": "7432:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 475,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7432:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 478,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "7457:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 507,
                        "src": "7449:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 477,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7449:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7431:34:3"
                  },
                  "returnParameters": {
                    "id": 482,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 481,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 507,
                        "src": "7497:4:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 480,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7497:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7496:6:3"
                  },
                  "scope": 954,
                  "src": "7404:261:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 521,
                    "nodeType": "Block",
                    "src": "8060:43:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 516,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 510,
                              "src": "8080:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 517,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 512,
                              "src": "8084:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 518,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8093:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 515,
                            "name": "_safeMint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              522,
                              551
                            ],
                            "referencedDeclaration": 551,
                            "src": "8070:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,uint256,bytes memory)"
                            }
                          },
                          "id": 519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8070:26:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 520,
                        "nodeType": "ExpressionStatement",
                        "src": "8070:26:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 508,
                    "nodeType": "StructuredDocumentation",
                    "src": "7671:319:3",
                    "text": " @dev Safely mints `tokenId` and transfers it to `to`.\n Requirements:\n - `tokenId` must not exist.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                  },
                  "id": 522,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeMint",
                  "nameLocation": "8004:9:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 513,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 510,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8022:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 522,
                        "src": "8014:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 509,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8014:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 512,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "8034:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 522,
                        "src": "8026:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 511,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8026:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8013:29:3"
                  },
                  "returnParameters": {
                    "id": 514,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8060:0:3"
                  },
                  "scope": 954,
                  "src": "7995:108:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 550,
                    "nodeType": "Block",
                    "src": "8408:195:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 533,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 525,
                              "src": "8424:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 534,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 527,
                              "src": "8428:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 532,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 628,
                            "src": "8418:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 535,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8418:18:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 536,
                        "nodeType": "ExpressionStatement",
                        "src": "8418:18:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 541,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8498:1:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 540,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8490:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 539,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "8490:7:3",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 542,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8490:10:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 543,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 525,
                                  "src": "8502:2:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 544,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 527,
                                  "src": "8506:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 545,
                                  "name": "data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 529,
                                  "src": "8515:4:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 538,
                                "name": "_checkOnERC721Received",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 912,
                                "src": "8467:22:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
                                }
                              },
                              "id": 546,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8467:53:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                              "id": 547,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8534:52:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                                "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                              },
                              "value": "ERC721: transfer to non ERC721Receiver implementer"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                                "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                              }
                            ],
                            "id": 537,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8446:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8446:150:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 549,
                        "nodeType": "ExpressionStatement",
                        "src": "8446:150:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 523,
                    "nodeType": "StructuredDocumentation",
                    "src": "8109:210:3",
                    "text": " @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n forwarded in {IERC721Receiver-onERC721Received} to contract recipients."
                  },
                  "id": 551,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeMint",
                  "nameLocation": "8333:9:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 530,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 525,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8351:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 551,
                        "src": "8343:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 524,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8343:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 527,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "8363:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 551,
                        "src": "8355:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 526,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8355:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 529,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "8385:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 551,
                        "src": "8372:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 528,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "8372:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8342:48:3"
                  },
                  "returnParameters": {
                    "id": 531,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8408:0:3"
                  },
                  "scope": 954,
                  "src": "8324:279:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 627,
                    "nodeType": "Block",
                    "src": "8986:859:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 565,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 560,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 554,
                                "src": "9004:2:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 563,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9018:1:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 562,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9010:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 561,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9010:7:3",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 564,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9010:10:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "9004:16:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a206d696e7420746f20746865207a65726f2061646472657373",
                              "id": 566,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9022:34:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
                                "typeString": "literal_string \"ERC721: mint to the zero address\""
                              },
                              "value": "ERC721: mint to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
                                "typeString": "literal_string \"ERC721: mint to the zero address\""
                              }
                            ],
                            "id": 559,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8996:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 567,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8996:61:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 568,
                        "nodeType": "ExpressionStatement",
                        "src": "8996:61:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 573,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "9075:17:3",
                              "subExpression": {
                                "arguments": [
                                  {
                                    "id": 571,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 556,
                                    "src": "9084:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 570,
                                  "name": "_exists",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 473,
                                  "src": "9076:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (uint256) view returns (bool)"
                                  }
                                },
                                "id": 572,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9076:16:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a20746f6b656e20616c7265616479206d696e746564",
                              "id": 574,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9094:30:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                                "typeString": "literal_string \"ERC721: token already minted\""
                              },
                              "value": "ERC721: token already minted"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                                "typeString": "literal_string \"ERC721: token already minted\""
                              }
                            ],
                            "id": 569,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9067:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9067:58:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 576,
                        "nodeType": "ExpressionStatement",
                        "src": "9067:58:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 580,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9165:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 579,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9157:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 578,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9157:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 581,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9157:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 582,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 554,
                              "src": "9169:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 583,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 556,
                              "src": "9173:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 584,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9182:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 577,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 925,
                            "src": "9136:20:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9136:48:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 586,
                        "nodeType": "ExpressionStatement",
                        "src": "9136:48:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 591,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "9279:17:3",
                              "subExpression": {
                                "arguments": [
                                  {
                                    "id": 589,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 556,
                                    "src": "9288:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 588,
                                  "name": "_exists",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 473,
                                  "src": "9280:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (uint256) view returns (bool)"
                                  }
                                },
                                "id": 590,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9280:16:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a20746f6b656e20616c7265616479206d696e746564",
                              "id": 592,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9298:30:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                                "typeString": "literal_string \"ERC721: token already minted\""
                              },
                              "value": "ERC721: token already minted"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                                "typeString": "literal_string \"ERC721: token already minted\""
                              }
                            ],
                            "id": 587,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9271:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9271:58:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 594,
                        "nodeType": "ExpressionStatement",
                        "src": "9271:58:3"
                      },
                      {
                        "id": 601,
                        "nodeType": "UncheckedBlock",
                        "src": "9340:360:3",
                        "statements": [
                          {
                            "expression": {
                              "id": 599,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 595,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 63,
                                  "src": "9671:9:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 597,
                                "indexExpression": {
                                  "id": 596,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 554,
                                  "src": "9681:2:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "9671:13:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "hexValue": "31",
                                "id": 598,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9688:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "9671:18:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 600,
                            "nodeType": "ExpressionStatement",
                            "src": "9671:18:3"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 602,
                              "name": "_owners",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59,
                              "src": "9710:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 604,
                            "indexExpression": {
                              "id": 603,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 556,
                              "src": "9718:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9710:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 605,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 554,
                            "src": "9729:2:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9710:21:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 607,
                        "nodeType": "ExpressionStatement",
                        "src": "9710:21:3"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 611,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9764:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 610,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9756:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 609,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9756:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 612,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9756:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 613,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 554,
                              "src": "9768:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 614,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 556,
                              "src": "9772:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 608,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 969,
                            "src": "9747:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 615,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9747:33:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 616,
                        "nodeType": "EmitStatement",
                        "src": "9742:38:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 620,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9819:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 619,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9811:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 618,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9811:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 621,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9811:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 622,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 554,
                              "src": "9823:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 623,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 556,
                              "src": "9827:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 624,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9836:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 617,
                            "name": "_afterTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 938,
                            "src": "9791:19:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9791:47:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 626,
                        "nodeType": "ExpressionStatement",
                        "src": "9791:47:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 552,
                    "nodeType": "StructuredDocumentation",
                    "src": "8609:311:3",
                    "text": " @dev Mints `tokenId` and transfers it to `to`.\n WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n Requirements:\n - `tokenId` must not exist.\n - `to` cannot be the zero address.\n Emits a {Transfer} event."
                  },
                  "id": 628,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nameLocation": "8934:5:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 557,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 554,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8948:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 628,
                        "src": "8940:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 553,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8940:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 556,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "8960:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 628,
                        "src": "8952:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 555,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8952:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8939:29:3"
                  },
                  "returnParameters": {
                    "id": 558,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8986:0:3"
                  },
                  "scope": 954,
                  "src": "8925:920:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 694,
                    "nodeType": "Block",
                    "src": "10220:713:3",
                    "statements": [
                      {
                        "assignments": [
                          635
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 635,
                            "mutability": "mutable",
                            "name": "owner",
                            "nameLocation": "10238:5:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 694,
                            "src": "10230:13:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 634,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "10230:7:3",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 640,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 638,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 631,
                              "src": "10261:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 636,
                              "name": "ERC721",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 954,
                              "src": "10246:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC721_$954_$",
                                "typeString": "type(contract ERC721)"
                              }
                            },
                            "id": 637,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "ownerOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 173,
                            "src": "10246:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10246:23:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10230:39:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 642,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 635,
                              "src": "10301:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 645,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10316:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 644,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10308:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 643,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10308:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 646,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10308:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 647,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 631,
                              "src": "10320:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 648,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10329:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 641,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 925,
                            "src": "10280:20:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10280:51:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 650,
                        "nodeType": "ExpressionStatement",
                        "src": "10280:51:3"
                      },
                      {
                        "expression": {
                          "id": 656,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 651,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 635,
                            "src": "10433:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 654,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 631,
                                "src": "10456:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 652,
                                "name": "ERC721",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 954,
                                "src": "10441:6:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ERC721_$954_$",
                                  "typeString": "type(contract ERC721)"
                                }
                              },
                              "id": 653,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "ownerOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 173,
                              "src": "10441:14:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                "typeString": "function (uint256) view returns (address)"
                              }
                            },
                            "id": 655,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10441:23:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "10433:31:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 657,
                        "nodeType": "ExpressionStatement",
                        "src": "10433:31:3"
                      },
                      {
                        "expression": {
                          "id": 661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "10502:31:3",
                          "subExpression": {
                            "baseExpression": {
                              "id": 658,
                              "name": "_tokenApprovals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67,
                              "src": "10509:15:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 660,
                            "indexExpression": {
                              "id": 659,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 631,
                              "src": "10525:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "10509:24:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 662,
                        "nodeType": "ExpressionStatement",
                        "src": "10502:31:3"
                      },
                      {
                        "id": 669,
                        "nodeType": "UncheckedBlock",
                        "src": "10544:237:3",
                        "statements": [
                          {
                            "expression": {
                              "id": 667,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 663,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 63,
                                  "src": "10749:9:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 665,
                                "indexExpression": {
                                  "id": 664,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 635,
                                  "src": "10759:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "10749:16:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "-=",
                              "rightHandSide": {
                                "hexValue": "31",
                                "id": 666,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10769:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "10749:21:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 668,
                            "nodeType": "ExpressionStatement",
                            "src": "10749:21:3"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 673,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "10790:23:3",
                          "subExpression": {
                            "baseExpression": {
                              "id": 670,
                              "name": "_owners",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59,
                              "src": "10797:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 672,
                            "indexExpression": {
                              "id": 671,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 631,
                              "src": "10805:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "10797:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 674,
                        "nodeType": "ExpressionStatement",
                        "src": "10790:23:3"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 676,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 635,
                              "src": "10838:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 679,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10853:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 678,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10845:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 677,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10845:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 680,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10845:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 681,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 631,
                              "src": "10857:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 675,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 969,
                            "src": "10829:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10829:36:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 683,
                        "nodeType": "EmitStatement",
                        "src": "10824:41:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 685,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 635,
                              "src": "10896:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 688,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10911:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 687,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10903:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 686,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10903:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 689,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10903:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 690,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 631,
                              "src": "10915:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 691,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10924:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 684,
                            "name": "_afterTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 938,
                            "src": "10876:19:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 692,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10876:50:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 693,
                        "nodeType": "ExpressionStatement",
                        "src": "10876:50:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 629,
                    "nodeType": "StructuredDocumentation",
                    "src": "9851:315:3",
                    "text": " @dev Destroys `tokenId`.\n The approval is cleared when the token is burned.\n This is an internal function that does not check if the sender is authorized to operate on the token.\n Requirements:\n - `tokenId` must exist.\n Emits a {Transfer} event."
                  },
                  "id": 695,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nameLocation": "10180:5:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 632,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 631,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "10194:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 695,
                        "src": "10186:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 630,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10186:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10185:17:3"
                  },
                  "returnParameters": {
                    "id": 633,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10220:0:3"
                  },
                  "scope": 954,
                  "src": "10171:762:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 779,
                    "nodeType": "Block",
                    "src": "11336:1124:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 708,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 702,
                                    "src": "11369:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 706,
                                    "name": "ERC721",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 954,
                                    "src": "11354:6:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ERC721_$954_$",
                                      "typeString": "type(contract ERC721)"
                                    }
                                  },
                                  "id": 707,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "ownerOf",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 173,
                                  "src": "11354:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                    "typeString": "function (uint256) view returns (address)"
                                  }
                                },
                                "id": 709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11354:23:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 710,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 698,
                                "src": "11381:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "11354:31:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a207472616e736665722066726f6d20696e636f7272656374206f776e6572",
                              "id": 712,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11387:39:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48",
                                "typeString": "literal_string \"ERC721: transfer from incorrect owner\""
                              },
                              "value": "ERC721: transfer from incorrect owner"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48",
                                "typeString": "literal_string \"ERC721: transfer from incorrect owner\""
                              }
                            ],
                            "id": 705,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "11346:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 713,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11346:81:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 714,
                        "nodeType": "ExpressionStatement",
                        "src": "11346:81:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 721,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 716,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 700,
                                "src": "11445:2:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 719,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11459:1:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 718,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "11451:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 717,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "11451:7:3",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 720,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11451:10:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "11445:16:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a207472616e7366657220746f20746865207a65726f2061646472657373",
                              "id": 722,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11463:38:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
                                "typeString": "literal_string \"ERC721: transfer to the zero address\""
                              },
                              "value": "ERC721: transfer to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
                                "typeString": "literal_string \"ERC721: transfer to the zero address\""
                              }
                            ],
                            "id": 715,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "11437:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 723,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11437:65:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 724,
                        "nodeType": "ExpressionStatement",
                        "src": "11437:65:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 726,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 698,
                              "src": "11534:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 727,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 700,
                              "src": "11540:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 728,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 702,
                              "src": "11544:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 729,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11553:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 725,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 925,
                            "src": "11513:20:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11513:42:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 731,
                        "nodeType": "ExpressionStatement",
                        "src": "11513:42:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 738,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 735,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 702,
                                    "src": "11670:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 733,
                                    "name": "ERC721",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 954,
                                    "src": "11655:6:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ERC721_$954_$",
                                      "typeString": "type(contract ERC721)"
                                    }
                                  },
                                  "id": 734,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "ownerOf",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 173,
                                  "src": "11655:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                    "typeString": "function (uint256) view returns (address)"
                                  }
                                },
                                "id": 736,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11655:23:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 737,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 698,
                                "src": "11682:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "11655:31:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a207472616e736665722066726f6d20696e636f7272656374206f776e6572",
                              "id": 739,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11688:39:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48",
                                "typeString": "literal_string \"ERC721: transfer from incorrect owner\""
                              },
                              "value": "ERC721: transfer from incorrect owner"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48",
                                "typeString": "literal_string \"ERC721: transfer from incorrect owner\""
                              }
                            ],
                            "id": 732,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "11647:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 740,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11647:81:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 741,
                        "nodeType": "ExpressionStatement",
                        "src": "11647:81:3"
                      },
                      {
                        "expression": {
                          "id": 745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "11790:31:3",
                          "subExpression": {
                            "baseExpression": {
                              "id": 742,
                              "name": "_tokenApprovals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67,
                              "src": "11797:15:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 744,
                            "indexExpression": {
                              "id": 743,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 702,
                              "src": "11813:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11797:24:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 746,
                        "nodeType": "ExpressionStatement",
                        "src": "11790:31:3"
                      },
                      {
                        "id": 759,
                        "nodeType": "UncheckedBlock",
                        "src": "11832:496:3",
                        "statements": [
                          {
                            "expression": {
                              "id": 751,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 747,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 63,
                                  "src": "12265:9:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 749,
                                "indexExpression": {
                                  "id": 748,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 698,
                                  "src": "12275:4:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "12265:15:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "-=",
                              "rightHandSide": {
                                "hexValue": "31",
                                "id": 750,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12284:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "12265:20:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 752,
                            "nodeType": "ExpressionStatement",
                            "src": "12265:20:3"
                          },
                          {
                            "expression": {
                              "id": 757,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 753,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 63,
                                  "src": "12299:9:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 755,
                                "indexExpression": {
                                  "id": 754,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 700,
                                  "src": "12309:2:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "12299:13:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "hexValue": "31",
                                "id": 756,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12316:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "12299:18:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 758,
                            "nodeType": "ExpressionStatement",
                            "src": "12299:18:3"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 760,
                              "name": "_owners",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59,
                              "src": "12337:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 762,
                            "indexExpression": {
                              "id": 761,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 702,
                              "src": "12345:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "12337:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 763,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 700,
                            "src": "12356:2:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "12337:21:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 765,
                        "nodeType": "ExpressionStatement",
                        "src": "12337:21:3"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 767,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 698,
                              "src": "12383:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 768,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 700,
                              "src": "12389:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 769,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 702,
                              "src": "12393:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 766,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 969,
                            "src": "12374:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 770,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12374:27:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 771,
                        "nodeType": "EmitStatement",
                        "src": "12369:32:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 773,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 698,
                              "src": "12432:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 774,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 700,
                              "src": "12438:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 775,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 702,
                              "src": "12442:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 776,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12451:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 772,
                            "name": "_afterTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 938,
                            "src": "12412:19:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 777,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12412:41:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 778,
                        "nodeType": "ExpressionStatement",
                        "src": "12412:41:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 696,
                    "nodeType": "StructuredDocumentation",
                    "src": "10939:313:3",
                    "text": " @dev Transfers `tokenId` from `from` to `to`.\n  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n Requirements:\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n Emits a {Transfer} event."
                  },
                  "id": 780,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nameLocation": "11266:9:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 703,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 698,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "11284:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 780,
                        "src": "11276:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 697,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11276:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 700,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "11298:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 780,
                        "src": "11290:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 699,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11290:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 702,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "11310:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 780,
                        "src": "11302:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 701,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11302:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11275:43:3"
                  },
                  "returnParameters": {
                    "id": 704,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11336:0:3"
                  },
                  "scope": 954,
                  "src": "11257:1203:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 803,
                    "nodeType": "Block",
                    "src": "12636:107:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 788,
                              "name": "_tokenApprovals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67,
                              "src": "12646:15:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 790,
                            "indexExpression": {
                              "id": 789,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 785,
                              "src": "12662:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "12646:24:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 791,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 783,
                            "src": "12673:2:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "12646:29:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 793,
                        "nodeType": "ExpressionStatement",
                        "src": "12646:29:3"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 797,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 785,
                                  "src": "12714:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 795,
                                  "name": "ERC721",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 954,
                                  "src": "12699:6:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ERC721_$954_$",
                                    "typeString": "type(contract ERC721)"
                                  }
                                },
                                "id": 796,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "ownerOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 173,
                                "src": "12699:14:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                  "typeString": "function (uint256) view returns (address)"
                                }
                              },
                              "id": 798,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12699:23:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 799,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 783,
                              "src": "12724:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 800,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 785,
                              "src": "12728:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 794,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 978,
                            "src": "12690:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12690:46:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 802,
                        "nodeType": "EmitStatement",
                        "src": "12685:51:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 781,
                    "nodeType": "StructuredDocumentation",
                    "src": "12466:101:3",
                    "text": " @dev Approve `to` to operate on `tokenId`\n Emits an {Approval} event."
                  },
                  "id": 804,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_approve",
                  "nameLocation": "12581:8:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 786,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 783,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "12598:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 804,
                        "src": "12590:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 782,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12590:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 785,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "12610:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 804,
                        "src": "12602:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 784,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12602:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12589:29:3"
                  },
                  "returnParameters": {
                    "id": 787,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12636:0:3"
                  },
                  "scope": 954,
                  "src": "12572:171:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 835,
                    "nodeType": "Block",
                    "src": "12972:184:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 817,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 815,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 807,
                                "src": "12990:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 816,
                                "name": "operator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 809,
                                "src": "12999:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "12990:17:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a20617070726f766520746f2063616c6c6572",
                              "id": 818,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13009:27:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
                                "typeString": "literal_string \"ERC721: approve to caller\""
                              },
                              "value": "ERC721: approve to caller"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
                                "typeString": "literal_string \"ERC721: approve to caller\""
                              }
                            ],
                            "id": 814,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "12982:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 819,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12982:55:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 820,
                        "nodeType": "ExpressionStatement",
                        "src": "12982:55:3"
                      },
                      {
                        "expression": {
                          "id": 827,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 821,
                                "name": "_operatorApprovals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 73,
                                "src": "13047:18:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 824,
                              "indexExpression": {
                                "id": 822,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 807,
                                "src": "13066:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13047:25:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 825,
                            "indexExpression": {
                              "id": 823,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 809,
                              "src": "13073:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "13047:35:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 826,
                            "name": "approved",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 811,
                            "src": "13085:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "13047:46:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 828,
                        "nodeType": "ExpressionStatement",
                        "src": "13047:46:3"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 830,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 807,
                              "src": "13123:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 831,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 809,
                              "src": "13130:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 832,
                              "name": "approved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 811,
                              "src": "13140:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 829,
                            "name": "ApprovalForAll",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 987,
                            "src": "13108:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,address,bool)"
                            }
                          },
                          "id": 833,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13108:41:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 834,
                        "nodeType": "EmitStatement",
                        "src": "13103:46:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 805,
                    "nodeType": "StructuredDocumentation",
                    "src": "12749:125:3",
                    "text": " @dev Approve `operator` to operate on all of `owner` tokens\n Emits an {ApprovalForAll} event."
                  },
                  "id": 836,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setApprovalForAll",
                  "nameLocation": "12888:18:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 812,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 807,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "12915:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 836,
                        "src": "12907:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 806,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12907:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 809,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "12930:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 836,
                        "src": "12922:16:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 808,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12922:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 811,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "12945:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 836,
                        "src": "12940:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 810,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "12940:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12906:48:3"
                  },
                  "returnParameters": {
                    "id": 813,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12972:0:3"
                  },
                  "scope": 954,
                  "src": "12879:277:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 849,
                    "nodeType": "Block",
                    "src": "13303:70:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 844,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 839,
                                  "src": "13329:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 843,
                                "name": "_exists",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 473,
                                "src": "13321:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (uint256) view returns (bool)"
                                }
                              },
                              "id": 845,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13321:16:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732313a20696e76616c696420746f6b656e204944",
                              "id": 846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13339:26:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f",
                                "typeString": "literal_string \"ERC721: invalid token ID\""
                              },
                              "value": "ERC721: invalid token ID"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f",
                                "typeString": "literal_string \"ERC721: invalid token ID\""
                              }
                            ],
                            "id": 842,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "13313:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13313:53:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 848,
                        "nodeType": "ExpressionStatement",
                        "src": "13313:53:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 837,
                    "nodeType": "StructuredDocumentation",
                    "src": "13162:73:3",
                    "text": " @dev Reverts if the `tokenId` has not been minted yet."
                  },
                  "id": 850,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_requireMinted",
                  "nameLocation": "13249:14:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 839,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "13272:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 850,
                        "src": "13264:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 838,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13264:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13263:17:3"
                  },
                  "returnParameters": {
                    "id": 841,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13303:0:3"
                  },
                  "scope": 954,
                  "src": "13240:133:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 911,
                    "nodeType": "Block",
                    "src": "14080:676:3",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 864,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 855,
                              "src": "14094:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 865,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isContract",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1289,
                            "src": "14094:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 866,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14094:15:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 909,
                          "nodeType": "Block",
                          "src": "14714:36:3",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 907,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14735:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 863,
                              "id": 908,
                              "nodeType": "Return",
                              "src": "14728:11:3"
                            }
                          ]
                        },
                        "id": 910,
                        "nodeType": "IfStatement",
                        "src": "14090:660:3",
                        "trueBody": {
                          "id": 906,
                          "nodeType": "Block",
                          "src": "14111:597:3",
                          "statements": [
                            {
                              "clauses": [
                                {
                                  "block": {
                                    "id": 886,
                                    "nodeType": "Block",
                                    "src": "14225:91:3",
                                    "statements": [
                                      {
                                        "expression": {
                                          "commonType": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          },
                                          "id": 884,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 880,
                                            "name": "retval",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 878,
                                            "src": "14250:6:3",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "==",
                                          "rightExpression": {
                                            "expression": {
                                              "expression": {
                                                "id": 881,
                                                "name": "IERC721Receiver",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1088,
                                                "src": "14260:15:3",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_contract$_IERC721Receiver_$1088_$",
                                                  "typeString": "type(contract IERC721Receiver)"
                                                }
                                              },
                                              "id": 882,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "memberName": "onERC721Received",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 1087,
                                              "src": "14260:32:3",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                                                "typeString": "function IERC721Receiver.onERC721Received(address,address,uint256,bytes calldata) returns (bytes4)"
                                              }
                                            },
                                            "id": 883,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "selector",
                                            "nodeType": "MemberAccess",
                                            "src": "14260:41:3",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            }
                                          },
                                          "src": "14250:51:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "functionReturnParameters": 863,
                                        "id": 885,
                                        "nodeType": "Return",
                                        "src": "14243:58:3"
                                      }
                                    ]
                                  },
                                  "errorName": "",
                                  "id": 887,
                                  "nodeType": "TryCatchClause",
                                  "parameters": {
                                    "id": 879,
                                    "nodeType": "ParameterList",
                                    "parameters": [
                                      {
                                        "constant": false,
                                        "id": 878,
                                        "mutability": "mutable",
                                        "name": "retval",
                                        "nameLocation": "14217:6:3",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 887,
                                        "src": "14210:13:3",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        },
                                        "typeName": {
                                          "id": 877,
                                          "name": "bytes4",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "14210:6:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "src": "14209:15:3"
                                  },
                                  "src": "14201:115:3"
                                },
                                {
                                  "block": {
                                    "id": 903,
                                    "nodeType": "Block",
                                    "src": "14345:353:3",
                                    "statements": [
                                      {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 894,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 891,
                                              "name": "reason",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 889,
                                              "src": "14367:6:3",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 892,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "14367:13:3",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "==",
                                          "rightExpression": {
                                            "hexValue": "30",
                                            "id": 893,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "14384:1:3",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "src": "14367:18:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "falseBody": {
                                          "id": 901,
                                          "nodeType": "Block",
                                          "src": "14494:190:3",
                                          "statements": [
                                            {
                                              "AST": {
                                                "nodeType": "YulBlock",
                                                "src": "14580:86:3",
                                                "statements": [
                                                  {
                                                    "expression": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "14617:2:3",
                                                              "type": "",
                                                              "value": "32"
                                                            },
                                                            {
                                                              "name": "reason",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "14621:6:3"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "14613:3:3"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "14613:15:3"
                                                        },
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "reason",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "14636:6:3"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "mload",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "14630:5:3"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "14630:13:3"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "14606:6:3"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "14606:38:3"
                                                    },
                                                    "nodeType": "YulExpressionStatement",
                                                    "src": "14606:38:3"
                                                  }
                                                ]
                                              },
                                              "documentation": "@solidity memory-safe-assembly",
                                              "evmVersion": "istanbul",
                                              "externalReferences": [
                                                {
                                                  "declaration": 889,
                                                  "isOffset": false,
                                                  "isSlot": false,
                                                  "src": "14621:6:3",
                                                  "valueSize": 1
                                                },
                                                {
                                                  "declaration": 889,
                                                  "isOffset": false,
                                                  "isSlot": false,
                                                  "src": "14636:6:3",
                                                  "valueSize": 1
                                                }
                                              ],
                                              "id": 900,
                                              "nodeType": "InlineAssembly",
                                              "src": "14571:95:3"
                                            }
                                          ]
                                        },
                                        "id": 902,
                                        "nodeType": "IfStatement",
                                        "src": "14363:321:3",
                                        "trueBody": {
                                          "id": 899,
                                          "nodeType": "Block",
                                          "src": "14387:101:3",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                                                    "id": 896,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "string",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "14416:52:3",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                                                      "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                                                    },
                                                    "value": "ERC721: transfer to non ERC721Receiver implementer"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                                                      "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                                                    }
                                                  ],
                                                  "id": 895,
                                                  "name": "revert",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [
                                                    -19,
                                                    -19
                                                  ],
                                                  "referencedDeclaration": -19,
                                                  "src": "14409:6:3",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                    "typeString": "function (string memory) pure"
                                                  }
                                                },
                                                "id": 897,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "14409:60:3",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$__$",
                                                  "typeString": "tuple()"
                                                }
                                              },
                                              "id": 898,
                                              "nodeType": "ExpressionStatement",
                                              "src": "14409:60:3"
                                            }
                                          ]
                                        }
                                      }
                                    ]
                                  },
                                  "errorName": "",
                                  "id": 904,
                                  "nodeType": "TryCatchClause",
                                  "parameters": {
                                    "id": 890,
                                    "nodeType": "ParameterList",
                                    "parameters": [
                                      {
                                        "constant": false,
                                        "id": 889,
                                        "mutability": "mutable",
                                        "name": "reason",
                                        "nameLocation": "14337:6:3",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 904,
                                        "src": "14324:19:3",
                                        "stateVariable": false,
                                        "storageLocation": "memory",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes"
                                        },
                                        "typeName": {
                                          "id": 888,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "14324:5:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "src": "14323:21:3"
                                  },
                                  "src": "14317:381:3"
                                }
                              ],
                              "externalCall": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 871,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1613,
                                      "src": "14166:10:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                        "typeString": "function () view returns (address)"
                                      }
                                    },
                                    "id": 872,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14166:12:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 873,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 853,
                                    "src": "14180:4:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 874,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 857,
                                    "src": "14186:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 875,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 859,
                                    "src": "14195:4:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 868,
                                        "name": "to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 855,
                                        "src": "14145:2:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 867,
                                      "name": "IERC721Receiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1088,
                                      "src": "14129:15:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721Receiver_$1088_$",
                                        "typeString": "type(contract IERC721Receiver)"
                                      }
                                    },
                                    "id": 869,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14129:19:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC721Receiver_$1088",
                                      "typeString": "contract IERC721Receiver"
                                    }
                                  },
                                  "id": 870,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC721Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1087,
                                  "src": "14129:36:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 876,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14129:71:3",
                                "tryCall": true,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "id": 905,
                              "nodeType": "TryStatement",
                              "src": "14125:573:3"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 851,
                    "nodeType": "StructuredDocumentation",
                    "src": "13379:541:3",
                    "text": " @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n The call is not executed if the target address is not a contract.\n @param from address representing the previous owner of the given token ID\n @param to target address that will receive the tokens\n @param tokenId uint256 ID of the token to be transferred\n @param data bytes optional data to send along with the call\n @return bool whether the call correctly returned the expected magic value"
                  },
                  "id": 912,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_checkOnERC721Received",
                  "nameLocation": "13934:22:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 860,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 853,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "13974:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "13966:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 852,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13966:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 855,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "13996:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "13988:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 854,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13988:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 857,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "14016:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "14008:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 856,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14008:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 859,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "14046:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "14033:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 858,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "14033:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13956:100:3"
                  },
                  "returnParameters": {
                    "id": 863,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 862,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "14074:4:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 861,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "14074:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14073:6:3"
                  },
                  "scope": 954,
                  "src": "13925:831:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 924,
                    "nodeType": "Block",
                    "src": "15586:2:3",
                    "statements": []
                  },
                  "documentation": {
                    "id": 913,
                    "nodeType": "StructuredDocumentation",
                    "src": "14762:705:3",
                    "text": " @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is\n used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.\n Calling conditions:\n - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`.\n - When `from` is zero, the tokens will be minted for `to`.\n - When `to` is zero, ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n - `batchSize` is non-zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                  },
                  "id": 925,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_beforeTokenTransfer",
                  "nameLocation": "15481:20:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 922,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 915,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "15510:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 925,
                        "src": "15502:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 914,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15502:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 917,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "15524:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 925,
                        "src": "15516:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 916,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15516:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 919,
                        "mutability": "mutable",
                        "name": "firstTokenId",
                        "nameLocation": "15536:12:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 925,
                        "src": "15528:20:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 918,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15528:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 921,
                        "mutability": "mutable",
                        "name": "batchSize",
                        "nameLocation": "15558:9:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 925,
                        "src": "15550:17:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 920,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15550:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15501:67:3"
                  },
                  "returnParameters": {
                    "id": 923,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15586:0:3"
                  },
                  "scope": 954,
                  "src": "15472:116:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 937,
                    "nodeType": "Block",
                    "src": "16407:2:3",
                    "statements": []
                  },
                  "documentation": {
                    "id": 926,
                    "nodeType": "StructuredDocumentation",
                    "src": "15594:695:3",
                    "text": " @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is\n used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.\n Calling conditions:\n - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`.\n - When `from` is zero, the tokens were minted for `to`.\n - When `to` is zero, ``from``'s tokens were burned.\n - `from` and `to` are never both zero.\n - `batchSize` is non-zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                  },
                  "id": 938,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_afterTokenTransfer",
                  "nameLocation": "16303:19:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 935,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 928,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "16331:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 938,
                        "src": "16323:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 927,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16323:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 930,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "16345:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 938,
                        "src": "16337:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 929,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16337:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 932,
                        "mutability": "mutable",
                        "name": "firstTokenId",
                        "nameLocation": "16357:12:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 938,
                        "src": "16349:20:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 931,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16349:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 934,
                        "mutability": "mutable",
                        "name": "batchSize",
                        "nameLocation": "16379:9:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 938,
                        "src": "16371:17:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 933,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16371:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16322:67:3"
                  },
                  "returnParameters": {
                    "id": 936,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16407:0:3"
                  },
                  "scope": 954,
                  "src": "16294:115:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 952,
                    "nodeType": "Block",
                    "src": "16958:45:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 946,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 63,
                              "src": "16968:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 948,
                            "indexExpression": {
                              "id": 947,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 941,
                              "src": "16978:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "16968:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 949,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 943,
                            "src": "16990:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16968:28:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 951,
                        "nodeType": "ExpressionStatement",
                        "src": "16968:28:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 939,
                    "nodeType": "StructuredDocumentation",
                    "src": "16415:409:3",
                    "text": " @dev Unsafe write access to the balances, used by extensions that \"mint\" tokens using an {ownerOf} override.\n WARNING: Anyone calling this MUST ensure that the balances remain consistent with the ownership. The invariant\n being that for any address `a` the value returned by `balanceOf(a)` must be equal to the number of tokens such\n that `ownerOf(tokenId)` is `a`."
                  },
                  "id": 953,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "__unsafe_increaseBalance",
                  "nameLocation": "16891:24:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 944,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 941,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "16924:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 953,
                        "src": "16916:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 940,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16916:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 943,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "16941:6:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 953,
                        "src": "16933:14:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 942,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16933:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16915:33:3"
                  },
                  "returnParameters": {
                    "id": 945,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16958:0:3"
                  },
                  "scope": 954,
                  "src": "16882:121:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 955,
              "src": "628:16377:3",
              "usedErrors": []
            }
          ],
          "src": "107:16899:3"
        },
        "id": 3
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
          "exportedSymbols": {
            "IERC165": [
              1962
            ],
            "IERC721": [
              1070
            ]
          },
          "id": 1071,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 956,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "108:23:4"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "../../utils/introspection/IERC165.sol",
              "id": 957,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1071,
              "sourceUnit": 1963,
              "src": "133:47:4",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 959,
                    "name": "IERC165",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1962,
                    "src": "271:7:4"
                  },
                  "id": 960,
                  "nodeType": "InheritanceSpecifier",
                  "src": "271:7:4"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 958,
                "nodeType": "StructuredDocumentation",
                "src": "182:67:4",
                "text": " @dev Required interface of an ERC721 compliant contract."
              },
              "fullyImplemented": false,
              "id": 1070,
              "linearizedBaseContracts": [
                1070,
                1962
              ],
              "name": "IERC721",
              "nameLocation": "260:7:4",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 961,
                    "nodeType": "StructuredDocumentation",
                    "src": "285:88:4",
                    "text": " @dev Emitted when `tokenId` token is transferred from `from` to `to`."
                  },
                  "id": 969,
                  "name": "Transfer",
                  "nameLocation": "384:8:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 968,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 963,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "409:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 969,
                        "src": "393:20:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 962,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "393:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 965,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "431:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 969,
                        "src": "415:18:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 964,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "415:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 967,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "451:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 969,
                        "src": "435:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 966,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "435:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "392:67:4"
                  },
                  "src": "378:82:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 970,
                    "nodeType": "StructuredDocumentation",
                    "src": "466:94:4",
                    "text": " @dev Emitted when `owner` enables `approved` to manage the `tokenId` token."
                  },
                  "id": 978,
                  "name": "Approval",
                  "nameLocation": "571:8:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 977,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 972,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "596:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 978,
                        "src": "580:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 971,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "580:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 974,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "619:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 978,
                        "src": "603:24:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 973,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "603:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 976,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "645:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 978,
                        "src": "629:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 975,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "629:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "579:74:4"
                  },
                  "src": "565:89:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 979,
                    "nodeType": "StructuredDocumentation",
                    "src": "660:117:4",
                    "text": " @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
                  },
                  "id": 987,
                  "name": "ApprovalForAll",
                  "nameLocation": "788:14:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 986,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 981,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "819:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 987,
                        "src": "803:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 980,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "803:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 983,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "842:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 987,
                        "src": "826:24:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 982,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "826:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 985,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "857:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 987,
                        "src": "852:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 984,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "852:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "802:64:4"
                  },
                  "src": "782:85:4"
                },
                {
                  "documentation": {
                    "id": 988,
                    "nodeType": "StructuredDocumentation",
                    "src": "873:76:4",
                    "text": " @dev Returns the number of tokens in ``owner``'s account."
                  },
                  "functionSelector": "70a08231",
                  "id": 995,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "963:9:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 991,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 990,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "981:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 995,
                        "src": "973:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 989,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "973:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "972:15:4"
                  },
                  "returnParameters": {
                    "id": 994,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 993,
                        "mutability": "mutable",
                        "name": "balance",
                        "nameLocation": "1019:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 995,
                        "src": "1011:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 992,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1011:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1010:17:4"
                  },
                  "scope": 1070,
                  "src": "954:74:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 996,
                    "nodeType": "StructuredDocumentation",
                    "src": "1034:131:4",
                    "text": " @dev Returns the owner of the `tokenId` token.\n Requirements:\n - `tokenId` must exist."
                  },
                  "functionSelector": "6352211e",
                  "id": 1003,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ownerOf",
                  "nameLocation": "1179:7:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 999,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 998,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1195:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1003,
                        "src": "1187:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 997,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1187:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1186:17:4"
                  },
                  "returnParameters": {
                    "id": 1002,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1001,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1235:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1003,
                        "src": "1227:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1000,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1227:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1226:15:4"
                  },
                  "scope": 1070,
                  "src": "1170:72:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1004,
                    "nodeType": "StructuredDocumentation",
                    "src": "1248:556:4",
                    "text": " @dev Safely transfers `tokenId` token from `from` to `to`.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "b88d4fde",
                  "id": 1015,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "1818:16:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1013,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1006,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "1843:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1015,
                        "src": "1835:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1005,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1835:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1008,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "1857:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1015,
                        "src": "1849:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1007,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1849:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1010,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1869:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1015,
                        "src": "1861:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1009,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1861:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1012,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "1893:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1015,
                        "src": "1878:19:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1011,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1878:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1834:64:4"
                  },
                  "returnParameters": {
                    "id": 1014,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1907:0:4"
                  },
                  "scope": 1070,
                  "src": "1809:99:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1016,
                    "nodeType": "StructuredDocumentation",
                    "src": "1914:687:4",
                    "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "42842e0e",
                  "id": 1025,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "2615:16:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1023,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1018,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "2640:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1025,
                        "src": "2632:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1017,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2632:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1020,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "2654:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1025,
                        "src": "2646:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1019,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2646:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1022,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2666:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1025,
                        "src": "2658:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1021,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2658:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2631:43:4"
                  },
                  "returnParameters": {
                    "id": 1024,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2683:0:4"
                  },
                  "scope": 1070,
                  "src": "2606:78:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1026,
                    "nodeType": "StructuredDocumentation",
                    "src": "2690:732:4",
                    "text": " @dev Transfers `tokenId` token from `from` to `to`.\n WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\n or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n understand this adds an external call which potentially creates a reentrancy vulnerability.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "23b872dd",
                  "id": 1035,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "3436:12:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1033,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1028,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "3457:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1035,
                        "src": "3449:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1027,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3449:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1030,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "3471:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1035,
                        "src": "3463:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1029,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3463:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1032,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3483:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1035,
                        "src": "3475:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1031,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3475:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3448:43:4"
                  },
                  "returnParameters": {
                    "id": 1034,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3500:0:4"
                  },
                  "scope": 1070,
                  "src": "3427:74:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1036,
                    "nodeType": "StructuredDocumentation",
                    "src": "3507:452:4",
                    "text": " @dev Gives permission to `to` to transfer `tokenId` token to another account.\n The approval is cleared when the token is transferred.\n Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n Requirements:\n - The caller must own the token or be an approved operator.\n - `tokenId` must exist.\n Emits an {Approval} event."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 1043,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "3973:7:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1041,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1038,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "3989:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1043,
                        "src": "3981:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1037,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3981:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1040,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4001:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1043,
                        "src": "3993:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1039,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3993:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3980:29:4"
                  },
                  "returnParameters": {
                    "id": 1042,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4018:0:4"
                  },
                  "scope": 1070,
                  "src": "3964:55:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1044,
                    "nodeType": "StructuredDocumentation",
                    "src": "4025:309:4",
                    "text": " @dev Approve or remove `operator` as an operator for the caller.\n Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n Requirements:\n - The `operator` cannot be the caller.\n Emits an {ApprovalForAll} event."
                  },
                  "functionSelector": "a22cb465",
                  "id": 1051,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovalForAll",
                  "nameLocation": "4348:17:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1049,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1046,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4374:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1051,
                        "src": "4366:16:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1045,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4366:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1048,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "4389:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1051,
                        "src": "4384:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1047,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4384:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4365:33:4"
                  },
                  "returnParameters": {
                    "id": 1050,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4407:0:4"
                  },
                  "scope": 1070,
                  "src": "4339:69:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1052,
                    "nodeType": "StructuredDocumentation",
                    "src": "4414:139:4",
                    "text": " @dev Returns the account approved for `tokenId` token.\n Requirements:\n - `tokenId` must exist."
                  },
                  "functionSelector": "081812fc",
                  "id": 1059,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getApproved",
                  "nameLocation": "4567:11:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1055,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1054,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4587:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1059,
                        "src": "4579:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1053,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4579:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4578:17:4"
                  },
                  "returnParameters": {
                    "id": 1058,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1057,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4627:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1059,
                        "src": "4619:16:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1056,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4619:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4618:18:4"
                  },
                  "scope": 1070,
                  "src": "4558:79:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1060,
                    "nodeType": "StructuredDocumentation",
                    "src": "4643:138:4",
                    "text": " @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n See {setApprovalForAll}"
                  },
                  "functionSelector": "e985e9c5",
                  "id": 1069,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isApprovedForAll",
                  "nameLocation": "4795:16:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1065,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1062,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "4820:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1069,
                        "src": "4812:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1061,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4812:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1064,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4835:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1069,
                        "src": "4827:16:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1063,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4827:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4811:33:4"
                  },
                  "returnParameters": {
                    "id": 1068,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1067,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1069,
                        "src": "4868:4:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1066,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4868:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4867:6:4"
                  },
                  "scope": 1070,
                  "src": "4786:88:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 1071,
              "src": "250:4626:4",
              "usedErrors": []
            }
          ],
          "src": "108:4769:4"
        },
        "id": 4
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
          "exportedSymbols": {
            "IERC721Receiver": [
              1088
            ]
          },
          "id": 1089,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1072,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "116:23:5"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1073,
                "nodeType": "StructuredDocumentation",
                "src": "141:152:5",
                "text": " @title ERC721 token receiver interface\n @dev Interface for any contract that wants to support safeTransfers\n from ERC721 asset contracts."
              },
              "fullyImplemented": false,
              "id": 1088,
              "linearizedBaseContracts": [
                1088
              ],
              "name": "IERC721Receiver",
              "nameLocation": "304:15:5",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 1074,
                    "nodeType": "StructuredDocumentation",
                    "src": "326:493:5",
                    "text": " @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n by `operator` from `from`, this function is called.\n It must return its Solidity selector to confirm the token transfer.\n If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`."
                  },
                  "functionSelector": "150b7a02",
                  "id": 1087,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "onERC721Received",
                  "nameLocation": "833:16:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1083,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1076,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "867:8:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1087,
                        "src": "859:16:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1075,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "859:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1078,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "893:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1087,
                        "src": "885:12:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1077,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "885:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1080,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "915:7:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1087,
                        "src": "907:15:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1079,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "907:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1082,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "947:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1087,
                        "src": "932:19:5",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1081,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "932:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "849:108:5"
                  },
                  "returnParameters": {
                    "id": 1086,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1085,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1087,
                        "src": "976:6:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 1084,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "976:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "975:8:5"
                  },
                  "scope": 1088,
                  "src": "824:160:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 1089,
              "src": "294:692:5",
              "usedErrors": []
            }
          ],
          "src": "116:871:5"
        },
        "id": 5
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol",
          "exportedSymbols": {
            "Address": [
              1601
            ],
            "Context": [
              1623
            ],
            "ERC165": [
              1950
            ],
            "ERC721": [
              954
            ],
            "ERC721URIStorage": [
              1244
            ],
            "IERC165": [
              1962
            ],
            "IERC4906": [
              24
            ],
            "IERC721": [
              1070
            ],
            "IERC721Metadata": [
              1271
            ],
            "IERC721Receiver": [
              1088
            ],
            "Math": [
              2828
            ],
            "SignedMath": [
              2933
            ],
            "Strings": [
              1926
            ]
          },
          "id": 1245,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1090,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "128:23:6"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "file": "../ERC721.sol",
              "id": 1091,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1245,
              "sourceUnit": 955,
              "src": "153:23:6",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/interfaces/IERC4906.sol",
              "file": "../../../interfaces/IERC4906.sol",
              "id": 1092,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1245,
              "sourceUnit": 25,
              "src": "177:42:6",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1094,
                    "name": "IERC4906",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 24,
                    "src": "329:8:6"
                  },
                  "id": 1095,
                  "nodeType": "InheritanceSpecifier",
                  "src": "329:8:6"
                },
                {
                  "baseName": {
                    "id": 1096,
                    "name": "ERC721",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 954,
                    "src": "339:6:6"
                  },
                  "id": 1097,
                  "nodeType": "InheritanceSpecifier",
                  "src": "339:6:6"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1093,
                "nodeType": "StructuredDocumentation",
                "src": "221:69:6",
                "text": " @dev ERC721 token with storage based token URI management."
              },
              "fullyImplemented": false,
              "id": 1244,
              "linearizedBaseContracts": [
                1244,
                954,
                1271,
                24,
                1070,
                1950,
                1962,
                1623
              ],
              "name": "ERC721URIStorage",
              "nameLocation": "309:16:6",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 1100,
                  "libraryName": {
                    "id": 1098,
                    "name": "Strings",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1926,
                    "src": "358:7:6"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "352:26:6",
                  "typeName": {
                    "id": 1099,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "370:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 1104,
                  "mutability": "mutable",
                  "name": "_tokenURIs",
                  "nameLocation": "458:10:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 1244,
                  "src": "423:45:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                    "typeString": "mapping(uint256 => string)"
                  },
                  "typeName": {
                    "id": 1103,
                    "keyType": {
                      "id": 1101,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "431:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "423:26:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                      "typeString": "mapping(uint256 => string)"
                    },
                    "valueType": {
                      "id": 1102,
                      "name": "string",
                      "nodeType": "ElementaryTypeName",
                      "src": "442:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    121,
                    1961
                  ],
                  "body": {
                    "id": 1127,
                    "nodeType": "Block",
                    "src": "643:97:6",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 1120,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1115,
                              "name": "interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1107,
                              "src": "660:11:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "30783439303634393036",
                                  "id": 1118,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "682:10:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1225148678_by_1",
                                    "typeString": "int_const 1225148678"
                                  },
                                  "value": "0x49064906"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_1225148678_by_1",
                                    "typeString": "int_const 1225148678"
                                  }
                                ],
                                "id": 1117,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "675:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes4_$",
                                  "typeString": "type(bytes4)"
                                },
                                "typeName": {
                                  "id": 1116,
                                  "name": "bytes4",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "675:6:6",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1119,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "675:18:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "660:33:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 1123,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1107,
                                "src": "721:11:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "id": 1121,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "697:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_super$_ERC721URIStorage_$1244_$",
                                  "typeString": "type(contract super ERC721URIStorage)"
                                }
                              },
                              "id": 1122,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "supportsInterface",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 121,
                              "src": "697:23:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                "typeString": "function (bytes4) view returns (bool)"
                              }
                            },
                            "id": 1124,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "697:36:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "660:73:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1114,
                        "id": 1126,
                        "nodeType": "Return",
                        "src": "653:80:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1105,
                    "nodeType": "StructuredDocumentation",
                    "src": "475:55:6",
                    "text": " @dev See {IERC165-supportsInterface}"
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 1128,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "544:17:6",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1111,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 1109,
                        "name": "ERC721",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 954,
                        "src": "611:6:6"
                      },
                      {
                        "id": 1110,
                        "name": "IERC165",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1962,
                        "src": "619:7:6"
                      }
                    ],
                    "src": "602:25:6"
                  },
                  "parameters": {
                    "id": 1108,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1107,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "569:11:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 1128,
                        "src": "562:18:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 1106,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "562:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "561:20:6"
                  },
                  "returnParameters": {
                    "id": 1114,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1113,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1128,
                        "src": "637:4:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1112,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "637:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "636:6:6"
                  },
                  "scope": 1244,
                  "src": "535:205:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    232
                  ],
                  "body": {
                    "id": 1186,
                    "nodeType": "Block",
                    "src": "894:520:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1138,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1131,
                              "src": "919:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1137,
                            "name": "_requireMinted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 850,
                            "src": "904:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$__$",
                              "typeString": "function (uint256) view"
                            }
                          },
                          "id": 1139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "904:23:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1140,
                        "nodeType": "ExpressionStatement",
                        "src": "904:23:6"
                      },
                      {
                        "assignments": [
                          1142
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1142,
                            "mutability": "mutable",
                            "name": "_tokenURI",
                            "nameLocation": "952:9:6",
                            "nodeType": "VariableDeclaration",
                            "scope": 1186,
                            "src": "938:23:6",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 1141,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "938:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1146,
                        "initialValue": {
                          "baseExpression": {
                            "id": 1143,
                            "name": "_tokenURIs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1104,
                            "src": "964:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                              "typeString": "mapping(uint256 => string storage ref)"
                            }
                          },
                          "id": 1145,
                          "indexExpression": {
                            "id": 1144,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1131,
                            "src": "975:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "964:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "938:45:6"
                      },
                      {
                        "assignments": [
                          1148
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1148,
                            "mutability": "mutable",
                            "name": "base",
                            "nameLocation": "1007:4:6",
                            "nodeType": "VariableDeclaration",
                            "scope": 1186,
                            "src": "993:18:6",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 1147,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "993:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1151,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1149,
                            "name": "_baseURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 241,
                            "src": "1014:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$",
                              "typeString": "function () view returns (string memory)"
                            }
                          },
                          "id": 1150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1014:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "993:31:6"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 1154,
                                  "name": "base",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1148,
                                  "src": "1103:4:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 1153,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1097:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 1152,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1097:5:6",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1155,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1097:11:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1156,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "1097:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1119:1:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1097:23:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1162,
                        "nodeType": "IfStatement",
                        "src": "1093:70:6",
                        "trueBody": {
                          "id": 1161,
                          "nodeType": "Block",
                          "src": "1122:41:6",
                          "statements": [
                            {
                              "expression": {
                                "id": 1159,
                                "name": "_tokenURI",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1142,
                                "src": "1143:9:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              "functionReturnParameters": 1136,
                              "id": 1160,
                              "nodeType": "Return",
                              "src": "1136:16:6"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 1165,
                                  "name": "_tokenURI",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1142,
                                  "src": "1271:9:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 1164,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1265:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 1163,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1265:5:6",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1166,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1265:16:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "1265:23:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1168,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1291:1:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1265:27:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1180,
                        "nodeType": "IfStatement",
                        "src": "1261:106:6",
                        "trueBody": {
                          "id": 1179,
                          "nodeType": "Block",
                          "src": "1294:73:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 1174,
                                        "name": "base",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1148,
                                        "src": "1339:4:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      },
                                      {
                                        "id": 1175,
                                        "name": "_tokenURI",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1142,
                                        "src": "1345:9:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        },
                                        {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      ],
                                      "expression": {
                                        "id": 1172,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "1322:3:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 1173,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "encodePacked",
                                      "nodeType": "MemberAccess",
                                      "src": "1322:16:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 1176,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1322:33:6",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 1171,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1315:6:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                    "typeString": "type(string storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 1170,
                                    "name": "string",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1315:6:6",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1177,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1315:41:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              "functionReturnParameters": 1136,
                              "id": 1178,
                              "nodeType": "Return",
                              "src": "1308:48:6"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1183,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1131,
                              "src": "1399:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 1181,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "1384:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_ERC721URIStorage_$1244_$",
                                "typeString": "type(contract super ERC721URIStorage)"
                              }
                            },
                            "id": 1182,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "tokenURI",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 232,
                            "src": "1384:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (uint256) view returns (string memory)"
                            }
                          },
                          "id": 1184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1384:23:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 1136,
                        "id": 1185,
                        "nodeType": "Return",
                        "src": "1377:30:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1129,
                    "nodeType": "StructuredDocumentation",
                    "src": "746:55:6",
                    "text": " @dev See {IERC721Metadata-tokenURI}."
                  },
                  "functionSelector": "c87b56dd",
                  "id": 1187,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenURI",
                  "nameLocation": "815:8:6",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1133,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "861:8:6"
                  },
                  "parameters": {
                    "id": 1132,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1131,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "832:7:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 1187,
                        "src": "824:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1130,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "824:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "823:17:6"
                  },
                  "returnParameters": {
                    "id": 1136,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1135,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1187,
                        "src": "879:13:6",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1134,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "879:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "878:15:6"
                  },
                  "scope": 1244,
                  "src": "806:608:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1212,
                    "nodeType": "Block",
                    "src": "1680:172:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1197,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1190,
                                  "src": "1706:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1196,
                                "name": "_exists",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 473,
                                "src": "1698:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (uint256) view returns (bool)"
                                }
                              },
                              "id": 1198,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1698:16:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524337323155524953746f726167653a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e",
                              "id": 1199,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1716:48:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4",
                                "typeString": "literal_string \"ERC721URIStorage: URI set of nonexistent token\""
                              },
                              "value": "ERC721URIStorage: URI set of nonexistent token"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7521de1f20ce4d7bb86b61090bad73a87315a1f4baff36cc352901c7777280c4",
                                "typeString": "literal_string \"ERC721URIStorage: URI set of nonexistent token\""
                              }
                            ],
                            "id": 1195,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1690:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1690:75:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1201,
                        "nodeType": "ExpressionStatement",
                        "src": "1690:75:6"
                      },
                      {
                        "expression": {
                          "id": 1206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1202,
                              "name": "_tokenURIs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1104,
                              "src": "1775:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                "typeString": "mapping(uint256 => string storage ref)"
                              }
                            },
                            "id": 1204,
                            "indexExpression": {
                              "id": 1203,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1190,
                              "src": "1786:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1775:19:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1205,
                            "name": "_tokenURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1192,
                            "src": "1797:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "1775:31:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1207,
                        "nodeType": "ExpressionStatement",
                        "src": "1775:31:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1209,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1190,
                              "src": "1837:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1208,
                            "name": "MetadataUpdate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16,
                            "src": "1822:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1822:23:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1211,
                        "nodeType": "EmitStatement",
                        "src": "1817:28:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1188,
                    "nodeType": "StructuredDocumentation",
                    "src": "1420:174:6",
                    "text": " @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n Emits {MetadataUpdate}.\n Requirements:\n - `tokenId` must exist."
                  },
                  "id": 1213,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setTokenURI",
                  "nameLocation": "1608:12:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1193,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1190,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1629:7:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 1213,
                        "src": "1621:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1189,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1621:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1192,
                        "mutability": "mutable",
                        "name": "_tokenURI",
                        "nameLocation": "1652:9:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 1213,
                        "src": "1638:23:6",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1191,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1638:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1620:42:6"
                  },
                  "returnParameters": {
                    "id": 1194,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1680:0:6"
                  },
                  "scope": 1244,
                  "src": "1599:253:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    695
                  ],
                  "body": {
                    "id": 1242,
                    "nodeType": "Block",
                    "src": "2128:142:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1223,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1216,
                              "src": "2150:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 1220,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "2138:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_ERC721URIStorage_$1244_$",
                                "typeString": "type(contract super ERC721URIStorage)"
                              }
                            },
                            "id": 1222,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_burn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 695,
                            "src": "2138:11:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1224,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2138:20:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1225,
                        "nodeType": "ExpressionStatement",
                        "src": "2138:20:6"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1234,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "id": 1228,
                                    "name": "_tokenURIs",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1104,
                                    "src": "2179:10:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                      "typeString": "mapping(uint256 => string storage ref)"
                                    }
                                  },
                                  "id": 1230,
                                  "indexExpression": {
                                    "id": 1229,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1216,
                                    "src": "2190:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2179:19:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                ],
                                "id": 1227,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2173:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 1226,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2173:5:6",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1231,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2173:26:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes storage pointer"
                              }
                            },
                            "id": 1232,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "2173:33:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1233,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2210:1:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2173:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1241,
                        "nodeType": "IfStatement",
                        "src": "2169:95:6",
                        "trueBody": {
                          "id": 1240,
                          "nodeType": "Block",
                          "src": "2213:51:6",
                          "statements": [
                            {
                              "expression": {
                                "id": 1238,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "2227:26:6",
                                "subExpression": {
                                  "baseExpression": {
                                    "id": 1235,
                                    "name": "_tokenURIs",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1104,
                                    "src": "2234:10:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                      "typeString": "mapping(uint256 => string storage ref)"
                                    }
                                  },
                                  "id": 1237,
                                  "indexExpression": {
                                    "id": 1236,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1216,
                                    "src": "2245:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2234:19:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1239,
                              "nodeType": "ExpressionStatement",
                              "src": "2227:26:6"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1214,
                    "nodeType": "StructuredDocumentation",
                    "src": "1858:207:6",
                    "text": " @dev See {ERC721-_burn}. This override additionally checks to see if a\n token-specific URI was set for the token, and if so, it deletes the token URI from\n the storage mapping."
                  },
                  "id": 1243,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nameLocation": "2079:5:6",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1218,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2119:8:6"
                  },
                  "parameters": {
                    "id": 1217,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1216,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2093:7:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 1243,
                        "src": "2085:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1215,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2085:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2084:17:6"
                  },
                  "returnParameters": {
                    "id": 1219,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2128:0:6"
                  },
                  "scope": 1244,
                  "src": "2070:200:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 1245,
              "src": "291:1981:6",
              "usedErrors": []
            }
          ],
          "src": "128:2145:6"
        },
        "id": 6
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
          "exportedSymbols": {
            "IERC165": [
              1962
            ],
            "IERC721": [
              1070
            ],
            "IERC721Metadata": [
              1271
            ]
          },
          "id": 1272,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1246,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "112:23:7"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "../IERC721.sol",
              "id": 1247,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1272,
              "sourceUnit": 1071,
              "src": "137:24:7",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1249,
                    "name": "IERC721",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1070,
                    "src": "326:7:7"
                  },
                  "id": 1250,
                  "nodeType": "InheritanceSpecifier",
                  "src": "326:7:7"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1248,
                "nodeType": "StructuredDocumentation",
                "src": "163:133:7",
                "text": " @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n @dev See https://eips.ethereum.org/EIPS/eip-721"
              },
              "fullyImplemented": false,
              "id": 1271,
              "linearizedBaseContracts": [
                1271,
                1070,
                1962
              ],
              "name": "IERC721Metadata",
              "nameLocation": "307:15:7",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 1251,
                    "nodeType": "StructuredDocumentation",
                    "src": "340:58:7",
                    "text": " @dev Returns the token collection name."
                  },
                  "functionSelector": "06fdde03",
                  "id": 1256,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nameLocation": "412:4:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1252,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "416:2:7"
                  },
                  "returnParameters": {
                    "id": 1255,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1254,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1256,
                        "src": "442:13:7",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1253,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "442:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "441:15:7"
                  },
                  "scope": 1271,
                  "src": "403:54:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1257,
                    "nodeType": "StructuredDocumentation",
                    "src": "463:60:7",
                    "text": " @dev Returns the token collection symbol."
                  },
                  "functionSelector": "95d89b41",
                  "id": 1262,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nameLocation": "537:6:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1258,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "543:2:7"
                  },
                  "returnParameters": {
                    "id": 1261,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1260,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1262,
                        "src": "569:13:7",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1259,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "569:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "568:15:7"
                  },
                  "scope": 1271,
                  "src": "528:56:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1263,
                    "nodeType": "StructuredDocumentation",
                    "src": "590:90:7",
                    "text": " @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token."
                  },
                  "functionSelector": "c87b56dd",
                  "id": 1270,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenURI",
                  "nameLocation": "694:8:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1266,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1265,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "711:7:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1270,
                        "src": "703:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1264,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "703:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "702:17:7"
                  },
                  "returnParameters": {
                    "id": 1269,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1268,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1270,
                        "src": "743:13:7",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1267,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "743:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "742:15:7"
                  },
                  "scope": 1271,
                  "src": "685:73:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 1272,
              "src": "297:463:7",
              "usedErrors": []
            }
          ],
          "src": "112:649:7"
        },
        "id": 7
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
          "exportedSymbols": {
            "Address": [
              1601
            ]
          },
          "id": 1602,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1273,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "101:23:8"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1274,
                "nodeType": "StructuredDocumentation",
                "src": "126:67:8",
                "text": " @dev Collection of functions related to the address type"
              },
              "fullyImplemented": true,
              "id": 1601,
              "linearizedBaseContracts": [
                1601
              ],
              "name": "Address",
              "nameLocation": "202:7:8",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1288,
                    "nodeType": "Block",
                    "src": "1478:254:8",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1286,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 1282,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1277,
                                "src": "1702:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 1283,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "1702:12:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1284,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "1702:19:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1285,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1724:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1702:23:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1281,
                        "id": 1287,
                        "nodeType": "Return",
                        "src": "1695:30:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1275,
                    "nodeType": "StructuredDocumentation",
                    "src": "216:1191:8",
                    "text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n Furthermore, `isContract` will also return true if the target contract within\n the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\n which only has an effect at the end of a transaction.\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="
                  },
                  "id": 1289,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isContract",
                  "nameLocation": "1421:10:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1278,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1277,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "1440:7:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1289,
                        "src": "1432:15:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1276,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1432:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1431:17:8"
                  },
                  "returnParameters": {
                    "id": 1281,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1280,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1289,
                        "src": "1472:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1279,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1472:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1471:6:8"
                  },
                  "scope": 1601,
                  "src": "1412:320:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1322,
                    "nodeType": "Block",
                    "src": "2718:241:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1304,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1300,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "2744:4:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$1601",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$1601",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 1299,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2736:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 1298,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2736:7:8",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1301,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2736:13:8",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 1302,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "2736:21:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 1303,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1294,
                                "src": "2761:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2736:31:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
                              "id": 1305,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2769:31:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              },
                              "value": "Address: insufficient balance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              }
                            ],
                            "id": 1297,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2728:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1306,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2728:73:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1307,
                        "nodeType": "ExpressionStatement",
                        "src": "2728:73:8"
                      },
                      {
                        "assignments": [
                          1309,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1309,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "2818:7:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1322,
                            "src": "2813:12:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 1308,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2813:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 1316,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "",
                              "id": 1314,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2861:2:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "expression": {
                                "id": 1310,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1292,
                                "src": "2831:9:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 1311,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "2831:14:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 1313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 1312,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1294,
                                "src": "2853:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "2831:29:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 1315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2831:33:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2812:52:8"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1318,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1309,
                              "src": "2882:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
                              "id": 1319,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2891:60:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              },
                              "value": "Address: unable to send value, recipient may have reverted"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              }
                            ],
                            "id": 1317,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2874:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2874:78:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1321,
                        "nodeType": "ExpressionStatement",
                        "src": "2874:78:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1290,
                    "nodeType": "StructuredDocumentation",
                    "src": "1738:904:8",
                    "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
                  },
                  "id": 1323,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sendValue",
                  "nameLocation": "2656:9:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1295,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1292,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "2682:9:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1323,
                        "src": "2666:25:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 1291,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2666:15:8",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1294,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "2701:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1323,
                        "src": "2693:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1293,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2693:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2665:43:8"
                  },
                  "returnParameters": {
                    "id": 1296,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2718:0:8"
                  },
                  "scope": 1601,
                  "src": "2647:312:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1340,
                    "nodeType": "Block",
                    "src": "3790:96:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1334,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1326,
                              "src": "3829:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1335,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1328,
                              "src": "3837:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 1336,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3843:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
                              "id": 1337,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3846:32:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              },
                              "value": "Address: low-level call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              }
                            ],
                            "id": 1333,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1381,
                              1425
                            ],
                            "referencedDeclaration": 1425,
                            "src": "3807:21:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 1338,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3807:72:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1332,
                        "id": 1339,
                        "nodeType": "Return",
                        "src": "3800:79:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1324,
                    "nodeType": "StructuredDocumentation",
                    "src": "2965:731:8",
                    "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
                  },
                  "id": 1341,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nameLocation": "3710:12:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1329,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1326,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "3731:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1341,
                        "src": "3723:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1325,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3723:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1328,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3752:4:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1341,
                        "src": "3739:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1327,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3739:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3722:35:8"
                  },
                  "returnParameters": {
                    "id": 1332,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1331,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1341,
                        "src": "3776:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1330,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3776:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3775:14:8"
                  },
                  "scope": 1601,
                  "src": "3701:185:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1360,
                    "nodeType": "Block",
                    "src": "4255:76:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1354,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1344,
                              "src": "4294:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1355,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1346,
                              "src": "4302:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 1356,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4308:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "id": 1357,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1348,
                              "src": "4311:12:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1353,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1381,
                              1425
                            ],
                            "referencedDeclaration": 1425,
                            "src": "4272:21:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 1358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4272:52:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1352,
                        "id": 1359,
                        "nodeType": "Return",
                        "src": "4265:59:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1342,
                    "nodeType": "StructuredDocumentation",
                    "src": "3892:211:8",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 1361,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nameLocation": "4117:12:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1349,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1344,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "4147:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1361,
                        "src": "4139:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1343,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4139:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1346,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4176:4:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1361,
                        "src": "4163:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1345,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4163:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1348,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "4204:12:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1361,
                        "src": "4190:26:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1347,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4190:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4129:93:8"
                  },
                  "returnParameters": {
                    "id": 1352,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1351,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1361,
                        "src": "4241:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1350,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4241:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4240:14:8"
                  },
                  "scope": 1601,
                  "src": "4108:223:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1380,
                    "nodeType": "Block",
                    "src": "4806:111:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1374,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1364,
                              "src": "4845:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1375,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1366,
                              "src": "4853:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1376,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1368,
                              "src": "4859:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
                              "id": 1377,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4866:43:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              },
                              "value": "Address: low-level call with value failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              }
                            ],
                            "id": 1373,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1381,
                              1425
                            ],
                            "referencedDeclaration": 1425,
                            "src": "4823:21:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 1378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4823:87:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1372,
                        "id": 1379,
                        "nodeType": "Return",
                        "src": "4816:94:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1362,
                    "nodeType": "StructuredDocumentation",
                    "src": "4337:351:8",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
                  },
                  "id": 1381,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nameLocation": "4702:21:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1369,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1364,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "4732:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1381,
                        "src": "4724:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1363,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4724:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1366,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4753:4:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1381,
                        "src": "4740:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1365,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4740:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1368,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "4767:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1381,
                        "src": "4759:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1367,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4759:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4723:50:8"
                  },
                  "returnParameters": {
                    "id": 1372,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1371,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1381,
                        "src": "4792:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1370,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4792:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4791:14:8"
                  },
                  "scope": 1601,
                  "src": "4693:224:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1424,
                    "nodeType": "Block",
                    "src": "5344:267:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1402,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1398,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "5370:4:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$1601",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$1601",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 1397,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5362:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 1396,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5362:7:8",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1399,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5362:13:8",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 1400,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "5362:21:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 1401,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1388,
                                "src": "5387:5:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5362:30:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
                              "id": 1403,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5394:40:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              },
                              "value": "Address: insufficient balance for call"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              }
                            ],
                            "id": 1395,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5354:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5354:81:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1405,
                        "nodeType": "ExpressionStatement",
                        "src": "5354:81:8"
                      },
                      {
                        "assignments": [
                          1407,
                          1409
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1407,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "5451:7:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1424,
                            "src": "5446:12:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 1406,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5446:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 1409,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "5473:10:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1424,
                            "src": "5460:23:8",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 1408,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "5460:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1416,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1414,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1386,
                              "src": "5513:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "id": 1410,
                                "name": "target",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1384,
                                "src": "5487:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 1411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "5487:11:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 1413,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 1412,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1388,
                                "src": "5506:5:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "5487:25:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 1415,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5487:31:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5445:73:8"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1418,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1384,
                              "src": "5562:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1419,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1407,
                              "src": "5570:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 1420,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1409,
                              "src": "5579:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1421,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1390,
                              "src": "5591:12:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1417,
                            "name": "verifyCallResultFromTarget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1556,
                            "src": "5535:26:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bool,bytes memory,string memory) view returns (bytes memory)"
                            }
                          },
                          "id": 1422,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5535:69:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1394,
                        "id": 1423,
                        "nodeType": "Return",
                        "src": "5528:76:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1382,
                    "nodeType": "StructuredDocumentation",
                    "src": "4923:237:8",
                    "text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 1425,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nameLocation": "5174:21:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1391,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1384,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "5213:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1425,
                        "src": "5205:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1383,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5205:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1386,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "5242:4:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1425,
                        "src": "5229:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1385,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5229:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1388,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5264:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1425,
                        "src": "5256:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1387,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5256:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1390,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "5293:12:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1425,
                        "src": "5279:26:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1389,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "5279:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5195:116:8"
                  },
                  "returnParameters": {
                    "id": 1394,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1393,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1425,
                        "src": "5330:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1392,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5330:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5329:14:8"
                  },
                  "scope": 1601,
                  "src": "5165:446:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1441,
                    "nodeType": "Block",
                    "src": "5888:97:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1436,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1428,
                              "src": "5924:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1437,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1430,
                              "src": "5932:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
                              "id": 1438,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5938:39:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                "typeString": "literal_string \"Address: low-level static call failed\""
                              },
                              "value": "Address: low-level static call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                "typeString": "literal_string \"Address: low-level static call failed\""
                              }
                            ],
                            "id": 1435,
                            "name": "functionStaticCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1442,
                              1471
                            ],
                            "referencedDeclaration": 1471,
                            "src": "5905:18:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) view returns (bytes memory)"
                            }
                          },
                          "id": 1439,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5905:73:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1434,
                        "id": 1440,
                        "nodeType": "Return",
                        "src": "5898:80:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1426,
                    "nodeType": "StructuredDocumentation",
                    "src": "5617:166:8",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                  },
                  "id": 1442,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nameLocation": "5797:18:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1431,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1428,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "5824:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1442,
                        "src": "5816:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1427,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5816:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1430,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "5845:4:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1442,
                        "src": "5832:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1429,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5832:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5815:35:8"
                  },
                  "returnParameters": {
                    "id": 1434,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1433,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1442,
                        "src": "5874:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1432,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5874:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5873:14:8"
                  },
                  "scope": 1601,
                  "src": "5788:197:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1470,
                    "nodeType": "Block",
                    "src": "6327:168:8",
                    "statements": [
                      {
                        "assignments": [
                          1455,
                          1457
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1455,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "6343:7:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1470,
                            "src": "6338:12:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 1454,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "6338:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 1457,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "6365:10:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1470,
                            "src": "6352:23:8",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 1456,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "6352:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1462,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1460,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1447,
                              "src": "6397:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 1458,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1445,
                              "src": "6379:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 1459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "staticcall",
                            "nodeType": "MemberAccess",
                            "src": "6379:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                            }
                          },
                          "id": 1461,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6379:23:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6337:65:8"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1464,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1445,
                              "src": "6446:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1465,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1455,
                              "src": "6454:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 1466,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1457,
                              "src": "6463:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1467,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1449,
                              "src": "6475:12:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1463,
                            "name": "verifyCallResultFromTarget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1556,
                            "src": "6419:26:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bool,bytes memory,string memory) view returns (bytes memory)"
                            }
                          },
                          "id": 1468,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6419:69:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1453,
                        "id": 1469,
                        "nodeType": "Return",
                        "src": "6412:76:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1443,
                    "nodeType": "StructuredDocumentation",
                    "src": "5991:173:8",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                  },
                  "id": 1471,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nameLocation": "6178:18:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1450,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1445,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "6214:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1471,
                        "src": "6206:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1444,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6206:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1447,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "6243:4:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1471,
                        "src": "6230:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1446,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6230:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1449,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "6271:12:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1471,
                        "src": "6257:26:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1448,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "6257:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6196:93:8"
                  },
                  "returnParameters": {
                    "id": 1453,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1452,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1471,
                        "src": "6313:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1451,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6313:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6312:14:8"
                  },
                  "scope": 1601,
                  "src": "6169:326:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1487,
                    "nodeType": "Block",
                    "src": "6771:101:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1482,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1474,
                              "src": "6809:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1483,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1476,
                              "src": "6817:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
                              "id": 1484,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6823:41:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                                "typeString": "literal_string \"Address: low-level delegate call failed\""
                              },
                              "value": "Address: low-level delegate call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                                "typeString": "literal_string \"Address: low-level delegate call failed\""
                              }
                            ],
                            "id": 1481,
                            "name": "functionDelegateCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1488,
                              1517
                            ],
                            "referencedDeclaration": 1517,
                            "src": "6788:20:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 1485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6788:77:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1480,
                        "id": 1486,
                        "nodeType": "Return",
                        "src": "6781:84:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1472,
                    "nodeType": "StructuredDocumentation",
                    "src": "6501:168:8",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
                  },
                  "id": 1488,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionDelegateCall",
                  "nameLocation": "6683:20:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1477,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1474,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "6712:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1488,
                        "src": "6704:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1473,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6704:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1476,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "6733:4:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1488,
                        "src": "6720:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1475,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6720:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6703:35:8"
                  },
                  "returnParameters": {
                    "id": 1480,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1479,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1488,
                        "src": "6757:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1478,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6757:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6756:14:8"
                  },
                  "scope": 1601,
                  "src": "6674:198:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1516,
                    "nodeType": "Block",
                    "src": "7213:170:8",
                    "statements": [
                      {
                        "assignments": [
                          1501,
                          1503
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1501,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "7229:7:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1516,
                            "src": "7224:12:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 1500,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "7224:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 1503,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "7251:10:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1516,
                            "src": "7238:23:8",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 1502,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "7238:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1508,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1506,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1493,
                              "src": "7285:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 1504,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1491,
                              "src": "7265:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 1505,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "delegatecall",
                            "nodeType": "MemberAccess",
                            "src": "7265:19:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) returns (bool,bytes memory)"
                            }
                          },
                          "id": 1507,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7265:25:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7223:67:8"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1510,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1491,
                              "src": "7334:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1511,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1501,
                              "src": "7342:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 1512,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1503,
                              "src": "7351:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1513,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1495,
                              "src": "7363:12:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1509,
                            "name": "verifyCallResultFromTarget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1556,
                            "src": "7307:26:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bool,bytes memory,string memory) view returns (bytes memory)"
                            }
                          },
                          "id": 1514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7307:69:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1499,
                        "id": 1515,
                        "nodeType": "Return",
                        "src": "7300:76:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1489,
                    "nodeType": "StructuredDocumentation",
                    "src": "6878:175:8",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
                  },
                  "id": 1517,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionDelegateCall",
                  "nameLocation": "7067:20:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1496,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1491,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "7105:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1517,
                        "src": "7097:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1490,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7097:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1493,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "7134:4:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1517,
                        "src": "7121:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1492,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7121:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1495,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "7162:12:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1517,
                        "src": "7148:26:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1494,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "7148:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7087:93:8"
                  },
                  "returnParameters": {
                    "id": 1499,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1498,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1517,
                        "src": "7199:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1497,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7199:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7198:14:8"
                  },
                  "scope": 1601,
                  "src": "7058:325:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1555,
                    "nodeType": "Block",
                    "src": "7865:434:8",
                    "statements": [
                      {
                        "condition": {
                          "id": 1531,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1522,
                          "src": "7879:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1553,
                          "nodeType": "Block",
                          "src": "8235:58:8",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 1549,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1524,
                                    "src": "8257:10:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  {
                                    "id": 1550,
                                    "name": "errorMessage",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1526,
                                    "src": "8269:12:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 1548,
                                  "name": "_revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1600,
                                  "src": "8249:7:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bytes memory,string memory) pure"
                                  }
                                },
                                "id": 1551,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8249:33:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1552,
                              "nodeType": "ExpressionStatement",
                              "src": "8249:33:8"
                            }
                          ]
                        },
                        "id": 1554,
                        "nodeType": "IfStatement",
                        "src": "7875:418:8",
                        "trueBody": {
                          "id": 1547,
                          "nodeType": "Block",
                          "src": "7888:341:8",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1535,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 1532,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1524,
                                    "src": "7906:10:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1533,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "7906:17:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 1534,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7927:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "7906:22:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1544,
                              "nodeType": "IfStatement",
                              "src": "7902:286:8",
                              "trueBody": {
                                "id": 1543,
                                "nodeType": "Block",
                                "src": "7930:258:8",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "id": 1538,
                                              "name": "target",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1520,
                                              "src": "8132:6:8",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            ],
                                            "id": 1537,
                                            "name": "isContract",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1289,
                                            "src": "8121:10:8",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                              "typeString": "function (address) view returns (bool)"
                                            }
                                          },
                                          "id": 1539,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "8121:18:8",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        {
                                          "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                          "id": 1540,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "string",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "8141:31:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                            "typeString": "literal_string \"Address: call to non-contract\""
                                          },
                                          "value": "Address: call to non-contract"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          },
                                          {
                                            "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                            "typeString": "literal_string \"Address: call to non-contract\""
                                          }
                                        ],
                                        "id": 1536,
                                        "name": "require",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [
                                          -18,
                                          -18
                                        ],
                                        "referencedDeclaration": -18,
                                        "src": "8113:7:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                          "typeString": "function (bool,string memory) pure"
                                        }
                                      },
                                      "id": 1541,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8113:60:8",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 1542,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8113:60:8"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "id": 1545,
                                "name": "returndata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1524,
                                "src": "8208:10:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 1530,
                              "id": 1546,
                              "nodeType": "Return",
                              "src": "8201:17:8"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1518,
                    "nodeType": "StructuredDocumentation",
                    "src": "7389:277:8",
                    "text": " @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._"
                  },
                  "id": 1556,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifyCallResultFromTarget",
                  "nameLocation": "7680:26:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1527,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1520,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "7724:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1556,
                        "src": "7716:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1519,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7716:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1522,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "7745:7:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1556,
                        "src": "7740:12:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1521,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7740:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1524,
                        "mutability": "mutable",
                        "name": "returndata",
                        "nameLocation": "7775:10:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1556,
                        "src": "7762:23:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1523,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7762:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1526,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "7809:12:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1556,
                        "src": "7795:26:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1525,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "7795:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7706:121:8"
                  },
                  "returnParameters": {
                    "id": 1530,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1529,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1556,
                        "src": "7851:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1528,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7851:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7850:14:8"
                  },
                  "scope": 1601,
                  "src": "7671:628:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1579,
                    "nodeType": "Block",
                    "src": "8680:135:8",
                    "statements": [
                      {
                        "condition": {
                          "id": 1568,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1559,
                          "src": "8694:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1577,
                          "nodeType": "Block",
                          "src": "8751:58:8",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 1573,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1561,
                                    "src": "8773:10:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  {
                                    "id": 1574,
                                    "name": "errorMessage",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1563,
                                    "src": "8785:12:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 1572,
                                  "name": "_revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1600,
                                  "src": "8765:7:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bytes memory,string memory) pure"
                                  }
                                },
                                "id": 1575,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8765:33:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1576,
                              "nodeType": "ExpressionStatement",
                              "src": "8765:33:8"
                            }
                          ]
                        },
                        "id": 1578,
                        "nodeType": "IfStatement",
                        "src": "8690:119:8",
                        "trueBody": {
                          "id": 1571,
                          "nodeType": "Block",
                          "src": "8703:42:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 1569,
                                "name": "returndata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1561,
                                "src": "8724:10:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 1567,
                              "id": 1570,
                              "nodeType": "Return",
                              "src": "8717:17:8"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1557,
                    "nodeType": "StructuredDocumentation",
                    "src": "8305:210:8",
                    "text": " @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._"
                  },
                  "id": 1580,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifyCallResult",
                  "nameLocation": "8529:16:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1564,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1559,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "8560:7:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1580,
                        "src": "8555:12:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1558,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8555:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1561,
                        "mutability": "mutable",
                        "name": "returndata",
                        "nameLocation": "8590:10:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1580,
                        "src": "8577:23:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1560,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "8577:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1563,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "8624:12:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1580,
                        "src": "8610:26:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1562,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "8610:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8545:97:8"
                  },
                  "returnParameters": {
                    "id": 1567,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1566,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1580,
                        "src": "8666:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1565,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "8666:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8665:14:8"
                  },
                  "scope": 1601,
                  "src": "8520:295:8",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1599,
                    "nodeType": "Block",
                    "src": "8904:457:8",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1587,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1582,
                              "src": "8980:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1588,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "8980:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1589,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9000:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8980:21:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1597,
                          "nodeType": "Block",
                          "src": "9310:45:8",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 1594,
                                    "name": "errorMessage",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1584,
                                    "src": "9331:12:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 1593,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "9324:6:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 1595,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9324:20:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1596,
                              "nodeType": "ExpressionStatement",
                              "src": "9324:20:8"
                            }
                          ]
                        },
                        "id": 1598,
                        "nodeType": "IfStatement",
                        "src": "8976:379:8",
                        "trueBody": {
                          "id": 1592,
                          "nodeType": "Block",
                          "src": "9003:301:8",
                          "statements": [
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "9161:133:8",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "9179:40:8",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "returndata",
                                          "nodeType": "YulIdentifier",
                                          "src": "9208:10:8"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "9202:5:8"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9202:17:8"
                                    },
                                    "variables": [
                                      {
                                        "name": "returndata_size",
                                        "nodeType": "YulTypedName",
                                        "src": "9183:15:8",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "9247:2:8",
                                              "type": "",
                                              "value": "32"
                                            },
                                            {
                                              "name": "returndata",
                                              "nodeType": "YulIdentifier",
                                              "src": "9251:10:8"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "9243:3:8"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "9243:19:8"
                                        },
                                        {
                                          "name": "returndata_size",
                                          "nodeType": "YulIdentifier",
                                          "src": "9264:15:8"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9236:6:8"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9236:44:8"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9236:44:8"
                                  }
                                ]
                              },
                              "documentation": "@solidity memory-safe-assembly",
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 1582,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "9208:10:8",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 1582,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "9251:10:8",
                                  "valueSize": 1
                                }
                              ],
                              "id": 1591,
                              "nodeType": "InlineAssembly",
                              "src": "9152:142:8"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 1600,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_revert",
                  "nameLocation": "8830:7:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1585,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1582,
                        "mutability": "mutable",
                        "name": "returndata",
                        "nameLocation": "8851:10:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1600,
                        "src": "8838:23:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1581,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "8838:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1584,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "8877:12:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1600,
                        "src": "8863:26:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1583,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "8863:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8837:53:8"
                  },
                  "returnParameters": {
                    "id": 1586,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8904:0:8"
                  },
                  "scope": 1601,
                  "src": "8821:540:8",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 1602,
              "src": "194:9169:8",
              "usedErrors": []
            }
          ],
          "src": "101:9263:8"
        },
        "id": 8
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
          "exportedSymbols": {
            "Context": [
              1623
            ]
          },
          "id": 1624,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1603,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "86:23:9"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1604,
                "nodeType": "StructuredDocumentation",
                "src": "111:496:9",
                "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": 1623,
              "linearizedBaseContracts": [
                1623
              ],
              "name": "Context",
              "nameLocation": "626:7:9",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1612,
                    "nodeType": "Block",
                    "src": "702:34:9",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 1609,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "719:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "719:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1608,
                        "id": 1611,
                        "nodeType": "Return",
                        "src": "712:17:9"
                      }
                    ]
                  },
                  "id": 1613,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgSender",
                  "nameLocation": "649:10:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1605,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "659:2:9"
                  },
                  "returnParameters": {
                    "id": 1608,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1607,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1613,
                        "src": "693:7:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1606,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "693:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "692:9:9"
                  },
                  "scope": 1623,
                  "src": "640:96:9",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1621,
                    "nodeType": "Block",
                    "src": "809:32:9",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 1618,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "826:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1619,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "src": "826:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "functionReturnParameters": 1617,
                        "id": 1620,
                        "nodeType": "Return",
                        "src": "819:15:9"
                      }
                    ]
                  },
                  "id": 1622,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgData",
                  "nameLocation": "751:8:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1614,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "759:2:9"
                  },
                  "returnParameters": {
                    "id": 1617,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1616,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1622,
                        "src": "793:14:9",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1615,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "793:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "792:16:9"
                  },
                  "scope": 1623,
                  "src": "742:99:9",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 1624,
              "src": "608:235:9",
              "usedErrors": []
            }
          ],
          "src": "86:758:9"
        },
        "id": 9
      },
      "@openzeppelin/contracts/utils/Counters.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
          "exportedSymbols": {
            "Counters": [
              1697
            ]
          },
          "id": 1698,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1625,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "87:23:10"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1626,
                "nodeType": "StructuredDocumentation",
                "src": "112:311:10",
                "text": " @title Counters\n @author Matt Condon (@shrugs)\n @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\n of elements in a mapping, issuing ERC721 ids, or counting request ids.\n Include with `using Counters for Counters.Counter;`"
              },
              "fullyImplemented": true,
              "id": 1697,
              "linearizedBaseContracts": [
                1697
              ],
              "name": "Counters",
              "nameLocation": "432:8:10",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "Counters.Counter",
                  "id": 1629,
                  "members": [
                    {
                      "constant": false,
                      "id": 1628,
                      "mutability": "mutable",
                      "name": "_value",
                      "nameLocation": "794:6:10",
                      "nodeType": "VariableDeclaration",
                      "scope": 1629,
                      "src": "786:14:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1627,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "786:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Counter",
                  "nameLocation": "454:7:10",
                  "nodeType": "StructDefinition",
                  "scope": 1697,
                  "src": "447:374:10",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1640,
                    "nodeType": "Block",
                    "src": "901:38:10",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 1637,
                            "name": "counter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1632,
                            "src": "918:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                              "typeString": "struct Counters.Counter storage pointer"
                            }
                          },
                          "id": 1638,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1628,
                          "src": "918:14:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1636,
                        "id": 1639,
                        "nodeType": "Return",
                        "src": "911:21:10"
                      }
                    ]
                  },
                  "id": 1641,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "current",
                  "nameLocation": "836:7:10",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1633,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1632,
                        "mutability": "mutable",
                        "name": "counter",
                        "nameLocation": "860:7:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 1641,
                        "src": "844:23:10",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                          "typeString": "struct Counters.Counter"
                        },
                        "typeName": {
                          "id": 1631,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1630,
                            "name": "Counter",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1629,
                            "src": "844:7:10"
                          },
                          "referencedDeclaration": 1629,
                          "src": "844:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                            "typeString": "struct Counters.Counter"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "843:25:10"
                  },
                  "returnParameters": {
                    "id": 1636,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1635,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1641,
                        "src": "892:7:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1634,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "892:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "891:9:10"
                  },
                  "scope": 1697,
                  "src": "827:112:10",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1654,
                    "nodeType": "Block",
                    "src": "998:70:10",
                    "statements": [
                      {
                        "id": 1653,
                        "nodeType": "UncheckedBlock",
                        "src": "1008:54:10",
                        "statements": [
                          {
                            "expression": {
                              "id": 1651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "id": 1647,
                                  "name": "counter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1644,
                                  "src": "1032:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                                    "typeString": "struct Counters.Counter storage pointer"
                                  }
                                },
                                "id": 1649,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "_value",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1628,
                                "src": "1032:14:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "hexValue": "31",
                                "id": 1650,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1050:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "1032:19:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1652,
                            "nodeType": "ExpressionStatement",
                            "src": "1032:19:10"
                          }
                        ]
                      }
                    ]
                  },
                  "id": 1655,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increment",
                  "nameLocation": "954:9:10",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1645,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1644,
                        "mutability": "mutable",
                        "name": "counter",
                        "nameLocation": "980:7:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 1655,
                        "src": "964:23:10",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                          "typeString": "struct Counters.Counter"
                        },
                        "typeName": {
                          "id": 1643,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1642,
                            "name": "Counter",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1629,
                            "src": "964:7:10"
                          },
                          "referencedDeclaration": 1629,
                          "src": "964:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                            "typeString": "struct Counters.Counter"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "963:25:10"
                  },
                  "returnParameters": {
                    "id": 1646,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "998:0:10"
                  },
                  "scope": 1697,
                  "src": "945:123:10",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1682,
                    "nodeType": "Block",
                    "src": "1127:176:10",
                    "statements": [
                      {
                        "assignments": [
                          1662
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1662,
                            "mutability": "mutable",
                            "name": "value",
                            "nameLocation": "1145:5:10",
                            "nodeType": "VariableDeclaration",
                            "scope": 1682,
                            "src": "1137:13:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1661,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1137:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1665,
                        "initialValue": {
                          "expression": {
                            "id": 1663,
                            "name": "counter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1658,
                            "src": "1153:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                              "typeString": "struct Counters.Counter storage pointer"
                            }
                          },
                          "id": 1664,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1628,
                          "src": "1153:14:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1137:30:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1667,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1662,
                                "src": "1185:5:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1668,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1193:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1185:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "436f756e7465723a2064656372656d656e74206f766572666c6f77",
                              "id": 1670,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1196:29:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_1dfd0d5389474d871b8e8929aab9d4def041f55f90f625754fb5f9a9ba08af6f",
                                "typeString": "literal_string \"Counter: decrement overflow\""
                              },
                              "value": "Counter: decrement overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_1dfd0d5389474d871b8e8929aab9d4def041f55f90f625754fb5f9a9ba08af6f",
                                "typeString": "literal_string \"Counter: decrement overflow\""
                              }
                            ],
                            "id": 1666,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1177:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1177:49:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1672,
                        "nodeType": "ExpressionStatement",
                        "src": "1177:49:10"
                      },
                      {
                        "id": 1681,
                        "nodeType": "UncheckedBlock",
                        "src": "1236:61:10",
                        "statements": [
                          {
                            "expression": {
                              "id": 1679,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "id": 1673,
                                  "name": "counter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1658,
                                  "src": "1260:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                                    "typeString": "struct Counters.Counter storage pointer"
                                  }
                                },
                                "id": 1675,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "_value",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1628,
                                "src": "1260:14:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1678,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1676,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1662,
                                  "src": "1277:5:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 1677,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1285:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "1277:9:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1260:26:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1680,
                            "nodeType": "ExpressionStatement",
                            "src": "1260:26:10"
                          }
                        ]
                      }
                    ]
                  },
                  "id": 1683,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decrement",
                  "nameLocation": "1083:9:10",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1659,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1658,
                        "mutability": "mutable",
                        "name": "counter",
                        "nameLocation": "1109:7:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 1683,
                        "src": "1093:23:10",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                          "typeString": "struct Counters.Counter"
                        },
                        "typeName": {
                          "id": 1657,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1656,
                            "name": "Counter",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1629,
                            "src": "1093:7:10"
                          },
                          "referencedDeclaration": 1629,
                          "src": "1093:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                            "typeString": "struct Counters.Counter"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1092:25:10"
                  },
                  "returnParameters": {
                    "id": 1660,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1127:0:10"
                  },
                  "scope": 1697,
                  "src": "1074:229:10",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1695,
                    "nodeType": "Block",
                    "src": "1358:35:10",
                    "statements": [
                      {
                        "expression": {
                          "id": 1693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1689,
                              "name": "counter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1686,
                              "src": "1368:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                                "typeString": "struct Counters.Counter storage pointer"
                              }
                            },
                            "id": 1691,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1628,
                            "src": "1368:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 1692,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1385:1:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1368:18:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1694,
                        "nodeType": "ExpressionStatement",
                        "src": "1368:18:10"
                      }
                    ]
                  },
                  "id": 1696,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "reset",
                  "nameLocation": "1318:5:10",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1687,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1686,
                        "mutability": "mutable",
                        "name": "counter",
                        "nameLocation": "1340:7:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 1696,
                        "src": "1324:23:10",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                          "typeString": "struct Counters.Counter"
                        },
                        "typeName": {
                          "id": 1685,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1684,
                            "name": "Counter",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1629,
                            "src": "1324:7:10"
                          },
                          "referencedDeclaration": 1629,
                          "src": "1324:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                            "typeString": "struct Counters.Counter"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1323:25:10"
                  },
                  "returnParameters": {
                    "id": 1688,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1358:0:10"
                  },
                  "scope": 1697,
                  "src": "1309:84:10",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1698,
              "src": "424:971:10",
              "usedErrors": []
            }
          ],
          "src": "87:1309:10"
        },
        "id": 10
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
          "exportedSymbols": {
            "Math": [
              2828
            ],
            "SignedMath": [
              2933
            ],
            "Strings": [
              1926
            ]
          },
          "id": 1927,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1699,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "101:23:11"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
              "file": "./math/Math.sol",
              "id": 1700,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1927,
              "sourceUnit": 2829,
              "src": "126:25:11",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/SignedMath.sol",
              "file": "./math/SignedMath.sol",
              "id": 1701,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1927,
              "sourceUnit": 2934,
              "src": "152:31:11",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1702,
                "nodeType": "StructuredDocumentation",
                "src": "185:34:11",
                "text": " @dev String operations."
              },
              "fullyImplemented": true,
              "id": 1926,
              "linearizedBaseContracts": [
                1926
              ],
              "name": "Strings",
              "nameLocation": "228:7:11",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 1705,
                  "mutability": "constant",
                  "name": "_SYMBOLS",
                  "nameLocation": "267:8:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 1926,
                  "src": "242:54:11",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes16",
                    "typeString": "bytes16"
                  },
                  "typeName": {
                    "id": 1703,
                    "name": "bytes16",
                    "nodeType": "ElementaryTypeName",
                    "src": "242:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes16",
                      "typeString": "bytes16"
                    }
                  },
                  "value": {
                    "hexValue": "30313233343536373839616263646566",
                    "id": 1704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "278:18:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f",
                      "typeString": "literal_string \"0123456789abcdef\""
                    },
                    "value": "0123456789abcdef"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 1708,
                  "mutability": "constant",
                  "name": "_ADDRESS_LENGTH",
                  "nameLocation": "325:15:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 1926,
                  "src": "302:43:11",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1706,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "302:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "hexValue": "3230",
                    "id": 1707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "343:2:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_20_by_1",
                      "typeString": "int_const 20"
                    },
                    "value": "20"
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1755,
                    "nodeType": "Block",
                    "src": "518:625:11",
                    "statements": [
                      {
                        "id": 1754,
                        "nodeType": "UncheckedBlock",
                        "src": "528:609:11",
                        "statements": [
                          {
                            "assignments": [
                              1717
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1717,
                                "mutability": "mutable",
                                "name": "length",
                                "nameLocation": "560:6:11",
                                "nodeType": "VariableDeclaration",
                                "scope": 1754,
                                "src": "552:14:11",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1716,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "552:7:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 1724,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1723,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 1720,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1711,
                                    "src": "580:5:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1718,
                                    "name": "Math",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2828,
                                    "src": "569:4:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Math_$2828_$",
                                      "typeString": "type(library Math)"
                                    }
                                  },
                                  "id": 1719,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "log10",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2665,
                                  "src": "569:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1721,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "569:17:11",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 1722,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "589:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "569:21:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "552:38:11"
                          },
                          {
                            "assignments": [
                              1726
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1726,
                                "mutability": "mutable",
                                "name": "buffer",
                                "nameLocation": "618:6:11",
                                "nodeType": "VariableDeclaration",
                                "scope": 1754,
                                "src": "604:20:11",
                                "stateVariable": false,
                                "storageLocation": "memory",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string"
                                },
                                "typeName": {
                                  "id": 1725,
                                  "name": "string",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "604:6:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage_ptr",
                                    "typeString": "string"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 1731,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 1729,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1717,
                                  "src": "638:6:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1728,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "NewExpression",
                                "src": "627:10:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (string memory)"
                                },
                                "typeName": {
                                  "id": 1727,
                                  "name": "string",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "631:6:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage_ptr",
                                    "typeString": "string"
                                  }
                                }
                              },
                              "id": 1730,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "627:18:11",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "604:41:11"
                          },
                          {
                            "assignments": [
                              1733
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1733,
                                "mutability": "mutable",
                                "name": "ptr",
                                "nameLocation": "667:3:11",
                                "nodeType": "VariableDeclaration",
                                "scope": 1754,
                                "src": "659:11:11",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1732,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "659:7:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 1734,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "659:11:11"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "740:67:11",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "758:35:11",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "buffer",
                                        "nodeType": "YulIdentifier",
                                        "src": "769:6:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "781:2:11",
                                            "type": "",
                                            "value": "32"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "785:6:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "777:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "777:15:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "765:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "765:28:11"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "ptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "758:3:11"
                                    }
                                  ]
                                }
                              ]
                            },
                            "documentation": "@solidity memory-safe-assembly",
                            "evmVersion": "istanbul",
                            "externalReferences": [
                              {
                                "declaration": 1726,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "769:6:11",
                                "valueSize": 1
                              },
                              {
                                "declaration": 1717,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "785:6:11",
                                "valueSize": 1
                              },
                              {
                                "declaration": 1733,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "758:3:11",
                                "valueSize": 1
                              }
                            ],
                            "id": 1735,
                            "nodeType": "InlineAssembly",
                            "src": "731:76:11"
                          },
                          {
                            "body": {
                              "id": 1750,
                              "nodeType": "Block",
                              "src": "833:267:11",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 1738,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "--",
                                    "prefix": false,
                                    "src": "851:5:11",
                                    "subExpression": {
                                      "id": 1737,
                                      "name": "ptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1733,
                                      "src": "851:3:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1739,
                                  "nodeType": "ExpressionStatement",
                                  "src": "851:5:11"
                                },
                                {
                                  "AST": {
                                    "nodeType": "YulBlock",
                                    "src": "934:84:11",
                                    "statements": [
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "964:3:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "value",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "978:5:11"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "985:2:11",
                                                      "type": "",
                                                      "value": "10"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "mod",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "974:3:11"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "974:14:11"
                                                },
                                                {
                                                  "name": "_SYMBOLS",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "990:8:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "byte",
                                                "nodeType": "YulIdentifier",
                                                "src": "969:4:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "969:30:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore8",
                                            "nodeType": "YulIdentifier",
                                            "src": "956:7:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "956:44:11"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "956:44:11"
                                      }
                                    ]
                                  },
                                  "documentation": "@solidity memory-safe-assembly",
                                  "evmVersion": "istanbul",
                                  "externalReferences": [
                                    {
                                      "declaration": 1705,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "990:8:11",
                                      "valueSize": 1
                                    },
                                    {
                                      "declaration": 1733,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "964:3:11",
                                      "valueSize": 1
                                    },
                                    {
                                      "declaration": 1711,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "978:5:11",
                                      "valueSize": 1
                                    }
                                  ],
                                  "id": 1740,
                                  "nodeType": "InlineAssembly",
                                  "src": "925:93:11"
                                },
                                {
                                  "expression": {
                                    "id": 1743,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 1741,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1711,
                                      "src": "1035:5:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "hexValue": "3130",
                                      "id": 1742,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1044:2:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10_by_1",
                                        "typeString": "int_const 10"
                                      },
                                      "value": "10"
                                    },
                                    "src": "1035:11:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1744,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1035:11:11"
                                },
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1747,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1745,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1711,
                                      "src": "1068:5:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 1746,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1077:1:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1068:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 1749,
                                  "nodeType": "IfStatement",
                                  "src": "1064:21:11",
                                  "trueBody": {
                                    "id": 1748,
                                    "nodeType": "Break",
                                    "src": "1080:5:11"
                                  }
                                }
                              ]
                            },
                            "condition": {
                              "hexValue": "74727565",
                              "id": 1736,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "827:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            "id": 1751,
                            "nodeType": "WhileStatement",
                            "src": "820:280:11"
                          },
                          {
                            "expression": {
                              "id": 1752,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1726,
                              "src": "1120:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "functionReturnParameters": 1715,
                            "id": 1753,
                            "nodeType": "Return",
                            "src": "1113:13:11"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1709,
                    "nodeType": "StructuredDocumentation",
                    "src": "352:90:11",
                    "text": " @dev Converts a `uint256` to its ASCII `string` decimal representation."
                  },
                  "id": 1756,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toString",
                  "nameLocation": "456:8:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1712,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1711,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "473:5:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 1756,
                        "src": "465:13:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1710,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "465:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "464:15:11"
                  },
                  "returnParameters": {
                    "id": 1715,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1714,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1756,
                        "src": "503:13:11",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1713,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "503:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "502:15:11"
                  },
                  "scope": 1926,
                  "src": "447:696:11",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1783,
                    "nodeType": "Block",
                    "src": "1313:103:11",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 1770,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1768,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1759,
                                      "src": "1354:5:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 1769,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1362:1:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1354:9:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "hexValue": "",
                                    "id": 1772,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1372:2:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    },
                                    "value": ""
                                  },
                                  "id": 1773,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "1354:20:11",
                                  "trueExpression": {
                                    "hexValue": "2d",
                                    "id": 1771,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1366:3:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
                                      "typeString": "literal_string \"-\""
                                    },
                                    "value": "-"
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 1777,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1759,
                                          "src": "1400:5:11",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        ],
                                        "expression": {
                                          "id": 1775,
                                          "name": "SignedMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2933,
                                          "src": "1385:10:11",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_SignedMath_$2933_$",
                                            "typeString": "type(library SignedMath)"
                                          }
                                        },
                                        "id": 1776,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "abs",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2932,
                                        "src": "1385:14:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$",
                                          "typeString": "function (int256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1778,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1385:21:11",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1774,
                                    "name": "toString",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      1756,
                                      1784
                                    ],
                                    "referencedDeclaration": 1756,
                                    "src": "1376:8:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                      "typeString": "function (uint256) pure returns (string memory)"
                                    }
                                  },
                                  "id": 1779,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1376:31:11",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  },
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "expression": {
                                  "id": 1766,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1337:3:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 1767,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "1337:16:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 1780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1337:71:11",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1765,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1330:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 1764,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "1330:6:11",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1330:79:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 1763,
                        "id": 1782,
                        "nodeType": "Return",
                        "src": "1323:86:11"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1757,
                    "nodeType": "StructuredDocumentation",
                    "src": "1149:89:11",
                    "text": " @dev Converts a `int256` to its ASCII `string` decimal representation."
                  },
                  "id": 1784,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toString",
                  "nameLocation": "1252:8:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1760,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1759,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1268:5:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 1784,
                        "src": "1261:12:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1758,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1261:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1260:14:11"
                  },
                  "returnParameters": {
                    "id": 1763,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1762,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1784,
                        "src": "1298:13:11",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1761,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1298:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1297:15:11"
                  },
                  "scope": 1926,
                  "src": "1243:173:11",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1803,
                    "nodeType": "Block",
                    "src": "1595:100:11",
                    "statements": [
                      {
                        "id": 1802,
                        "nodeType": "UncheckedBlock",
                        "src": "1605:84:11",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 1793,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1787,
                                  "src": "1648:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1799,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 1796,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1787,
                                        "src": "1667:5:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 1794,
                                        "name": "Math",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2828,
                                        "src": "1655:4:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_Math_$2828_$",
                                          "typeString": "type(library Math)"
                                        }
                                      },
                                      "id": 1795,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "log256",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2788,
                                      "src": "1655:11:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 1797,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1655:18:11",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 1798,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1676:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "1655:22:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1792,
                                "name": "toHexString",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  1804,
                                  1880,
                                  1900
                                ],
                                "referencedDeclaration": 1880,
                                "src": "1636:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256,uint256) pure returns (string memory)"
                                }
                              },
                              "id": 1800,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1636:42:11",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "functionReturnParameters": 1791,
                            "id": 1801,
                            "nodeType": "Return",
                            "src": "1629:49:11"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1785,
                    "nodeType": "StructuredDocumentation",
                    "src": "1422:94:11",
                    "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."
                  },
                  "id": 1804,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "1530:11:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1788,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1787,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1550:5:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 1804,
                        "src": "1542:13:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1786,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1542:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1541:15:11"
                  },
                  "returnParameters": {
                    "id": 1791,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1790,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1804,
                        "src": "1580:13:11",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1789,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1580:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1579:15:11"
                  },
                  "scope": 1926,
                  "src": "1521:174:11",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1879,
                    "nodeType": "Block",
                    "src": "1908:347:11",
                    "statements": [
                      {
                        "assignments": [
                          1815
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1815,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "1931:6:11",
                            "nodeType": "VariableDeclaration",
                            "scope": 1879,
                            "src": "1918:19:11",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 1814,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "1918:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1824,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1822,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1820,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 1818,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1950:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 1819,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1809,
                                  "src": "1954:6:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1950:10:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 1821,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1963:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "1950:14:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1817,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "1940:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 1816,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "1944:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 1823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1940:25:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1918:47:11"
                      },
                      {
                        "expression": {
                          "id": 1829,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1825,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1815,
                              "src": "1975:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1827,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 1826,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1982:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1975:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 1828,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1987:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
                              "typeString": "literal_string \"0\""
                            },
                            "value": "0"
                          },
                          "src": "1975:15:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 1830,
                        "nodeType": "ExpressionStatement",
                        "src": "1975:15:11"
                      },
                      {
                        "expression": {
                          "id": 1835,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1831,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1815,
                              "src": "2000:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1833,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 1832,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2007:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2000:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "78",
                            "id": 1834,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2012:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83",
                              "typeString": "literal_string \"x\""
                            },
                            "value": "x"
                          },
                          "src": "2000:15:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 1836,
                        "nodeType": "ExpressionStatement",
                        "src": "2000:15:11"
                      },
                      {
                        "body": {
                          "id": 1865,
                          "nodeType": "Block",
                          "src": "2070:83:11",
                          "statements": [
                            {
                              "expression": {
                                "id": 1859,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 1851,
                                    "name": "buffer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1815,
                                    "src": "2084:6:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1853,
                                  "indexExpression": {
                                    "id": 1852,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1838,
                                    "src": "2091:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2084:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 1854,
                                    "name": "_SYMBOLS",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1705,
                                    "src": "2096:8:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes16",
                                      "typeString": "bytes16"
                                    }
                                  },
                                  "id": 1858,
                                  "indexExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1857,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1855,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1807,
                                      "src": "2105:5:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&",
                                    "rightExpression": {
                                      "hexValue": "307866",
                                      "id": 1856,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2113:3:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_15_by_1",
                                        "typeString": "int_const 15"
                                      },
                                      "value": "0xf"
                                    },
                                    "src": "2105:11:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2096:21:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "src": "2084:33:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                }
                              },
                              "id": 1860,
                              "nodeType": "ExpressionStatement",
                              "src": "2084:33:11"
                            },
                            {
                              "expression": {
                                "id": 1863,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 1861,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1807,
                                  "src": "2131:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "34",
                                  "id": 1862,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2141:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "2131:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1864,
                              "nodeType": "ExpressionStatement",
                              "src": "2131:11:11"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1845,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1838,
                            "src": "2058:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 1846,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2062:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "2058:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1866,
                        "initializationExpression": {
                          "assignments": [
                            1838
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1838,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "2038:1:11",
                              "nodeType": "VariableDeclaration",
                              "scope": 1866,
                              "src": "2030:9:11",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1837,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2030:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 1844,
                          "initialValue": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1843,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1841,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "32",
                                "id": 1839,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2042:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 1840,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1809,
                                "src": "2046:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2042:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 1842,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2055:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "2042:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2030:26:11"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 1849,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": true,
                            "src": "2065:3:11",
                            "subExpression": {
                              "id": 1848,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1838,
                              "src": "2067:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1850,
                          "nodeType": "ExpressionStatement",
                          "src": "2065:3:11"
                        },
                        "nodeType": "ForStatement",
                        "src": "2025:128:11"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1870,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1868,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1807,
                                "src": "2170:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1869,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2179:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2170:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "537472696e67733a20686578206c656e67746820696e73756666696369656e74",
                              "id": 1871,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2182:34:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
                                "typeString": "literal_string \"Strings: hex length insufficient\""
                              },
                              "value": "Strings: hex length insufficient"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
                                "typeString": "literal_string \"Strings: hex length insufficient\""
                              }
                            ],
                            "id": 1867,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2162:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1872,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2162:55:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1873,
                        "nodeType": "ExpressionStatement",
                        "src": "2162:55:11"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1876,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1815,
                              "src": "2241:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1875,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2234:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 1874,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "2234:6:11",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1877,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2234:14:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 1813,
                        "id": 1878,
                        "nodeType": "Return",
                        "src": "2227:21:11"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1805,
                    "nodeType": "StructuredDocumentation",
                    "src": "1701:112:11",
                    "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."
                  },
                  "id": 1880,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "1827:11:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1810,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1807,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1847:5:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 1880,
                        "src": "1839:13:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1806,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1839:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1809,
                        "mutability": "mutable",
                        "name": "length",
                        "nameLocation": "1862:6:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 1880,
                        "src": "1854:14:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1808,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1854:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1838:31:11"
                  },
                  "returnParameters": {
                    "id": 1813,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1812,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1880,
                        "src": "1893:13:11",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1811,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1893:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1892:15:11"
                  },
                  "scope": 1926,
                  "src": "1818:437:11",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1899,
                    "nodeType": "Block",
                    "src": "2480:76:11",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 1893,
                                      "name": "addr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1883,
                                      "src": "2525:4:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 1892,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2517:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint160_$",
                                      "typeString": "type(uint160)"
                                    },
                                    "typeName": {
                                      "id": 1891,
                                      "name": "uint160",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2517:7:11",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1894,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2517:13:11",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                ],
                                "id": 1890,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2509:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 1889,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2509:7:11",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1895,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2509:22:11",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1896,
                              "name": "_ADDRESS_LENGTH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1708,
                              "src": "2533:15:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 1888,
                            "name": "toHexString",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1804,
                              1880,
                              1900
                            ],
                            "referencedDeclaration": 1880,
                            "src": "2497:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (uint256,uint256) pure returns (string memory)"
                            }
                          },
                          "id": 1897,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2497:52:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 1887,
                        "id": 1898,
                        "nodeType": "Return",
                        "src": "2490:59:11"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1881,
                    "nodeType": "StructuredDocumentation",
                    "src": "2261:141:11",
                    "text": " @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation."
                  },
                  "id": 1900,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "2416:11:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1884,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1883,
                        "mutability": "mutable",
                        "name": "addr",
                        "nameLocation": "2436:4:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 1900,
                        "src": "2428:12:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1882,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2428:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2427:14:11"
                  },
                  "returnParameters": {
                    "id": 1887,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1886,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1900,
                        "src": "2465:13:11",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1885,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2465:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2464:15:11"
                  },
                  "scope": 1926,
                  "src": "2407:149:11",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1924,
                    "nodeType": "Block",
                    "src": "2711:66:11",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 1922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 1913,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1903,
                                    "src": "2744:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 1912,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2738:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 1911,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2738:5:11",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1914,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2738:8:11",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 1910,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "2728:9:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 1915,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2728:19:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 1919,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1905,
                                    "src": "2767:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 1918,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2761:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 1917,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2761:5:11",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1920,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2761:8:11",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 1916,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "2751:9:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 1921,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2751:19:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2728:42:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1909,
                        "id": 1923,
                        "nodeType": "Return",
                        "src": "2721:49:11"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1901,
                    "nodeType": "StructuredDocumentation",
                    "src": "2562:66:11",
                    "text": " @dev Returns true if the two strings are equal."
                  },
                  "id": 1925,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "equal",
                  "nameLocation": "2642:5:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1906,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1903,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "2662:1:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 1925,
                        "src": "2648:15:11",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1902,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2648:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1905,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "2679:1:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 1925,
                        "src": "2665:15:11",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1904,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2665:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2647:34:11"
                  },
                  "returnParameters": {
                    "id": 1909,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1908,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1925,
                        "src": "2705:4:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1907,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2705:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2704:6:11"
                  },
                  "scope": 1926,
                  "src": "2633:144:11",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1927,
              "src": "220:2559:11",
              "usedErrors": []
            }
          ],
          "src": "101:2679:11"
        },
        "id": 11
      },
      "@openzeppelin/contracts/utils/introspection/ERC165.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
          "exportedSymbols": {
            "ERC165": [
              1950
            ],
            "IERC165": [
              1962
            ]
          },
          "id": 1951,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1928,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "99:23:12"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "./IERC165.sol",
              "id": 1929,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1951,
              "sourceUnit": 1963,
              "src": "124:23:12",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1931,
                    "name": "IERC165",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1962,
                    "src": "754:7:12"
                  },
                  "id": 1932,
                  "nodeType": "InheritanceSpecifier",
                  "src": "754:7:12"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1930,
                "nodeType": "StructuredDocumentation",
                "src": "149:576:12",
                "text": " @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```\n Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation."
              },
              "fullyImplemented": true,
              "id": 1950,
              "linearizedBaseContracts": [
                1950,
                1962
              ],
              "name": "ERC165",
              "nameLocation": "744:6:12",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    1961
                  ],
                  "body": {
                    "id": 1948,
                    "nodeType": "Block",
                    "src": "920:64:12",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 1946,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1941,
                            "name": "interfaceId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1935,
                            "src": "937:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 1943,
                                  "name": "IERC165",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1962,
                                  "src": "957:7:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$1962_$",
                                    "typeString": "type(contract IERC165)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$1962_$",
                                    "typeString": "type(contract IERC165)"
                                  }
                                ],
                                "id": 1942,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "952:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 1944,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "952:13:12",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_contract$_IERC165_$1962",
                                "typeString": "type(contract IERC165)"
                              }
                            },
                            "id": 1945,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "interfaceId",
                            "nodeType": "MemberAccess",
                            "src": "952:25:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "937:40:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1940,
                        "id": 1947,
                        "nodeType": "Return",
                        "src": "930:47:12"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1933,
                    "nodeType": "StructuredDocumentation",
                    "src": "768:56:12",
                    "text": " @dev See {IERC165-supportsInterface}."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 1949,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "838:17:12",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1937,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "896:8:12"
                  },
                  "parameters": {
                    "id": 1936,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1935,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "863:11:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 1949,
                        "src": "856:18:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 1934,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "856:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "855:20:12"
                  },
                  "returnParameters": {
                    "id": 1940,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1939,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1949,
                        "src": "914:4:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1938,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "914:4:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "913:6:12"
                  },
                  "scope": 1950,
                  "src": "829:155:12",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 1951,
              "src": "726:260:12",
              "usedErrors": []
            }
          ],
          "src": "99:888:12"
        },
        "id": 12
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
          "exportedSymbols": {
            "IERC165": [
              1962
            ]
          },
          "id": 1963,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1952,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "100:23:13"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1953,
                "nodeType": "StructuredDocumentation",
                "src": "125:279:13",
                "text": " @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[EIP].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."
              },
              "fullyImplemented": false,
              "id": 1962,
              "linearizedBaseContracts": [
                1962
              ],
              "name": "IERC165",
              "nameLocation": "415:7:13",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 1954,
                    "nodeType": "StructuredDocumentation",
                    "src": "429:340:13",
                    "text": " @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 1961,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "783:17:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1957,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1956,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "808:11:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1961,
                        "src": "801:18:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 1955,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "801:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "800:20:13"
                  },
                  "returnParameters": {
                    "id": 1960,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1959,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1961,
                        "src": "844:4:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1958,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "844:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "843:6:13"
                  },
                  "scope": 1962,
                  "src": "774:76:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 1963,
              "src": "405:447:13",
              "usedErrors": []
            }
          ],
          "src": "100:753:13"
        },
        "id": 13
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
          "exportedSymbols": {
            "Math": [
              2828
            ]
          },
          "id": 2829,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1964,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "103:23:14"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1965,
                "nodeType": "StructuredDocumentation",
                "src": "128:73:14",
                "text": " @dev Standard math utilities missing in the Solidity language."
              },
              "fullyImplemented": true,
              "id": 2828,
              "linearizedBaseContracts": [
                2828
              ],
              "name": "Math",
              "nameLocation": "210:4:14",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "Math.Rounding",
                  "id": 1969,
                  "members": [
                    {
                      "id": 1966,
                      "name": "Down",
                      "nameLocation": "245:4:14",
                      "nodeType": "EnumValue",
                      "src": "245:4:14"
                    },
                    {
                      "id": 1967,
                      "name": "Up",
                      "nameLocation": "287:2:14",
                      "nodeType": "EnumValue",
                      "src": "287:2:14"
                    },
                    {
                      "id": 1968,
                      "name": "Zero",
                      "nameLocation": "318:4:14",
                      "nodeType": "EnumValue",
                      "src": "318:4:14"
                    }
                  ],
                  "name": "Rounding",
                  "nameLocation": "226:8:14",
                  "nodeType": "EnumDefinition",
                  "src": "221:122:14"
                },
                {
                  "body": {
                    "id": 1986,
                    "nodeType": "Block",
                    "src": "480:37:14",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1981,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1979,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1972,
                              "src": "497:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 1980,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1974,
                              "src": "501:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "497:5:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "id": 1983,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1974,
                            "src": "509:1:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "497:13:14",
                          "trueExpression": {
                            "id": 1982,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1972,
                            "src": "505:1:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1978,
                        "id": 1985,
                        "nodeType": "Return",
                        "src": "490:20:14"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1970,
                    "nodeType": "StructuredDocumentation",
                    "src": "349:59:14",
                    "text": " @dev Returns the largest of two numbers."
                  },
                  "id": 1987,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "max",
                  "nameLocation": "422:3:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1975,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1972,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "434:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 1987,
                        "src": "426:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1971,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "426:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1974,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "445:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 1987,
                        "src": "437:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1973,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "437:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "425:22:14"
                  },
                  "returnParameters": {
                    "id": 1978,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1977,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1987,
                        "src": "471:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1976,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "471:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "470:9:14"
                  },
                  "scope": 2828,
                  "src": "413:104:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2004,
                    "nodeType": "Block",
                    "src": "655:37:14",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1999,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1997,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1990,
                              "src": "672:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 1998,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1992,
                              "src": "676:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "672:5:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "id": 2001,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1992,
                            "src": "684:1:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "672:13:14",
                          "trueExpression": {
                            "id": 2000,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1990,
                            "src": "680:1:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1996,
                        "id": 2003,
                        "nodeType": "Return",
                        "src": "665:20:14"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1988,
                    "nodeType": "StructuredDocumentation",
                    "src": "523:60:14",
                    "text": " @dev Returns the smallest of two numbers."
                  },
                  "id": 2005,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "min",
                  "nameLocation": "597:3:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1993,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1990,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "609:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2005,
                        "src": "601:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1989,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "601:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1992,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "620:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2005,
                        "src": "612:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1991,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "612:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "600:22:14"
                  },
                  "returnParameters": {
                    "id": 1996,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1995,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2005,
                        "src": "646:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1994,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "646:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "645:9:14"
                  },
                  "scope": 2828,
                  "src": "588:104:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2027,
                    "nodeType": "Block",
                    "src": "876:82:14",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2017,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2015,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2008,
                                  "src": "931:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "id": 2016,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2010,
                                  "src": "935:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "931:5:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 2018,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "930:7:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2024,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2021,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2019,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2008,
                                    "src": "941:1:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "^",
                                  "rightExpression": {
                                    "id": 2020,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2010,
                                    "src": "945:1:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "941:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 2022,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "940:7:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 2023,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "950:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "940:11:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "930:21:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2014,
                        "id": 2026,
                        "nodeType": "Return",
                        "src": "923:28:14"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2006,
                    "nodeType": "StructuredDocumentation",
                    "src": "698:102:14",
                    "text": " @dev Returns the average of two numbers. The result is rounded towards\n zero."
                  },
                  "id": 2028,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "average",
                  "nameLocation": "814:7:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2011,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2008,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "830:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2028,
                        "src": "822:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2007,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "822:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2010,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "841:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2028,
                        "src": "833:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2009,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "833:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "821:22:14"
                  },
                  "returnParameters": {
                    "id": 2014,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2013,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2028,
                        "src": "867:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2012,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "867:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "866:9:14"
                  },
                  "scope": 2828,
                  "src": "805:153:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2052,
                    "nodeType": "Block",
                    "src": "1228:123:14",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2038,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2031,
                              "src": "1316:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 2039,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1321:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "1316:6:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2049,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2047,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2044,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2042,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2031,
                                      "src": "1330:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 2043,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1334:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "1330:5:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 2045,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1329:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "id": 2046,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2033,
                                "src": "1339:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1329:11:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 2048,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1343:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "1329:15:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2050,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "1316:28:14",
                          "trueExpression": {
                            "hexValue": "30",
                            "id": 2041,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1325:1:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2037,
                        "id": 2051,
                        "nodeType": "Return",
                        "src": "1309:35:14"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2029,
                    "nodeType": "StructuredDocumentation",
                    "src": "964:188:14",
                    "text": " @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds up instead\n of rounding down."
                  },
                  "id": 2053,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ceilDiv",
                  "nameLocation": "1166:7:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2034,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2031,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1182:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2053,
                        "src": "1174:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2030,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1174:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2033,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1193:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2053,
                        "src": "1185:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2032,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1185:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1173:22:14"
                  },
                  "returnParameters": {
                    "id": 2037,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2036,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2053,
                        "src": "1219:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2035,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1219:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1218:9:14"
                  },
                  "scope": 2828,
                  "src": "1157:194:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2175,
                    "nodeType": "Block",
                    "src": "1765:4115:14",
                    "statements": [
                      {
                        "id": 2174,
                        "nodeType": "UncheckedBlock",
                        "src": "1775:4099:14",
                        "statements": [
                          {
                            "assignments": [
                              2066
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2066,
                                "mutability": "mutable",
                                "name": "prod0",
                                "nameLocation": "2104:5:14",
                                "nodeType": "VariableDeclaration",
                                "scope": 2174,
                                "src": "2096:13:14",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2065,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2096:7:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2067,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2096:13:14"
                          },
                          {
                            "assignments": [
                              2069
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2069,
                                "mutability": "mutable",
                                "name": "prod1",
                                "nameLocation": "2176:5:14",
                                "nodeType": "VariableDeclaration",
                                "scope": 2174,
                                "src": "2168:13:14",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2068,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2168:7:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2070,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2168:13:14"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "2248:157:14",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "2266:30:14",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "x",
                                        "nodeType": "YulIdentifier",
                                        "src": "2283:1:14"
                                      },
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "2286:1:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2293:1:14",
                                            "type": "",
                                            "value": "0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "2289:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2289:6:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mulmod",
                                      "nodeType": "YulIdentifier",
                                      "src": "2276:6:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2276:20:14"
                                  },
                                  "variables": [
                                    {
                                      "name": "mm",
                                      "nodeType": "YulTypedName",
                                      "src": "2270:2:14",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2313:18:14",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "x",
                                        "nodeType": "YulIdentifier",
                                        "src": "2326:1:14"
                                      },
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "2329:1:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "2322:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2322:9:14"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod0",
                                      "nodeType": "YulIdentifier",
                                      "src": "2313:5:14"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2348:43:14",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "mm",
                                            "nodeType": "YulIdentifier",
                                            "src": "2365:2:14"
                                          },
                                          {
                                            "name": "prod0",
                                            "nodeType": "YulIdentifier",
                                            "src": "2369:5:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "2361:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2361:14:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "mm",
                                            "nodeType": "YulIdentifier",
                                            "src": "2380:2:14"
                                          },
                                          {
                                            "name": "prod0",
                                            "nodeType": "YulIdentifier",
                                            "src": "2384:5:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "lt",
                                          "nodeType": "YulIdentifier",
                                          "src": "2377:2:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2377:13:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2357:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2357:34:14"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod1",
                                      "nodeType": "YulIdentifier",
                                      "src": "2348:5:14"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "istanbul",
                            "externalReferences": [
                              {
                                "declaration": 2066,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2313:5:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2066,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2369:5:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2066,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2384:5:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2069,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2348:5:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2056,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2283:1:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2056,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2326:1:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2058,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2286:1:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2058,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2329:1:14",
                                "valueSize": 1
                              }
                            ],
                            "id": 2071,
                            "nodeType": "InlineAssembly",
                            "src": "2239:166:14"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2074,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2072,
                                "name": "prod1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2069,
                                "src": "2486:5:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2073,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2495:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2486:10:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2080,
                            "nodeType": "IfStatement",
                            "src": "2482:368:14",
                            "trueBody": {
                              "id": 2079,
                              "nodeType": "Block",
                              "src": "2498:352:14",
                              "statements": [
                                {
                                  "expression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2077,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2075,
                                      "name": "prod0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2066,
                                      "src": "2816:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "/",
                                    "rightExpression": {
                                      "id": 2076,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2060,
                                      "src": "2824:11:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2816:19:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "functionReturnParameters": 2064,
                                  "id": 2078,
                                  "nodeType": "Return",
                                  "src": "2809:26:14"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2084,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2082,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2060,
                                    "src": "2960:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "id": 2083,
                                    "name": "prod1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2069,
                                    "src": "2974:5:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "2960:19:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "hexValue": "4d6174683a206d756c446976206f766572666c6f77",
                                  "id": 2085,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2981:23:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851",
                                    "typeString": "literal_string \"Math: mulDiv overflow\""
                                  },
                                  "value": "Math: mulDiv overflow"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851",
                                    "typeString": "literal_string \"Math: mulDiv overflow\""
                                  }
                                ],
                                "id": 2081,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "2952:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 2086,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2952:53:14",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 2087,
                            "nodeType": "ExpressionStatement",
                            "src": "2952:53:14"
                          },
                          {
                            "assignments": [
                              2089
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2089,
                                "mutability": "mutable",
                                "name": "remainder",
                                "nameLocation": "3269:9:14",
                                "nodeType": "VariableDeclaration",
                                "scope": 2174,
                                "src": "3261:17:14",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2088,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3261:7:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2090,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "3261:17:14"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "3301:291:14",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3370:38:14",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "x",
                                        "nodeType": "YulIdentifier",
                                        "src": "3390:1:14"
                                      },
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "3393:1:14"
                                      },
                                      {
                                        "name": "denominator",
                                        "nodeType": "YulIdentifier",
                                        "src": "3396:11:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mulmod",
                                      "nodeType": "YulIdentifier",
                                      "src": "3383:6:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3383:25:14"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "remainder",
                                      "nodeType": "YulIdentifier",
                                      "src": "3370:9:14"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3490:41:14",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "prod1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3503:5:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "remainder",
                                            "nodeType": "YulIdentifier",
                                            "src": "3513:9:14"
                                          },
                                          {
                                            "name": "prod0",
                                            "nodeType": "YulIdentifier",
                                            "src": "3524:5:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "gt",
                                          "nodeType": "YulIdentifier",
                                          "src": "3510:2:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3510:20:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3499:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3499:32:14"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod1",
                                      "nodeType": "YulIdentifier",
                                      "src": "3490:5:14"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3548:30:14",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "prod0",
                                        "nodeType": "YulIdentifier",
                                        "src": "3561:5:14"
                                      },
                                      {
                                        "name": "remainder",
                                        "nodeType": "YulIdentifier",
                                        "src": "3568:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3557:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3557:21:14"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod0",
                                      "nodeType": "YulIdentifier",
                                      "src": "3548:5:14"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "istanbul",
                            "externalReferences": [
                              {
                                "declaration": 2060,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3396:11:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2066,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3524:5:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2066,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3548:5:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2066,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3561:5:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2069,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3490:5:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2069,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3503:5:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2089,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3370:9:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2089,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3513:9:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2089,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3568:9:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2056,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3390:1:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2058,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3393:1:14",
                                "valueSize": 1
                              }
                            ],
                            "id": 2091,
                            "nodeType": "InlineAssembly",
                            "src": "3292:300:14"
                          },
                          {
                            "assignments": [
                              2093
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2093,
                                "mutability": "mutable",
                                "name": "twos",
                                "nameLocation": "3907:4:14",
                                "nodeType": "VariableDeclaration",
                                "scope": 2174,
                                "src": "3899:12:14",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2092,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3899:7:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2101,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2100,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2094,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2060,
                                "src": "3914:11:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2098,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2096,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "3929:12:14",
                                      "subExpression": {
                                        "id": 2095,
                                        "name": "denominator",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2060,
                                        "src": "3930:11:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 2097,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3944:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "3929:16:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 2099,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3928:18:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3914:32:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "3899:47:14"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "3969:362:14",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "4034:37:14",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "denominator",
                                        "nodeType": "YulIdentifier",
                                        "src": "4053:11:14"
                                      },
                                      {
                                        "name": "twos",
                                        "nodeType": "YulIdentifier",
                                        "src": "4066:4:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nodeType": "YulIdentifier",
                                      "src": "4049:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4049:22:14"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "denominator",
                                      "nodeType": "YulIdentifier",
                                      "src": "4034:11:14"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "4138:25:14",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "prod0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4151:5:14"
                                      },
                                      {
                                        "name": "twos",
                                        "nodeType": "YulIdentifier",
                                        "src": "4158:4:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nodeType": "YulIdentifier",
                                      "src": "4147:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4147:16:14"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod0",
                                      "nodeType": "YulIdentifier",
                                      "src": "4138:5:14"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "4278:39:14",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4298:1:14",
                                                "type": "",
                                                "value": "0"
                                              },
                                              {
                                                "name": "twos",
                                                "nodeType": "YulIdentifier",
                                                "src": "4301:4:14"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "4294:3:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4294:12:14"
                                          },
                                          {
                                            "name": "twos",
                                            "nodeType": "YulIdentifier",
                                            "src": "4308:4:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "4290:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4290:23:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4315:1:14",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4286:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4286:31:14"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "twos",
                                      "nodeType": "YulIdentifier",
                                      "src": "4278:4:14"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "istanbul",
                            "externalReferences": [
                              {
                                "declaration": 2060,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4034:11:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2060,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4053:11:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2066,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4138:5:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2066,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4151:5:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2093,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4066:4:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2093,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4158:4:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2093,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4278:4:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2093,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4301:4:14",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2093,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4308:4:14",
                                "valueSize": 1
                              }
                            ],
                            "id": 2102,
                            "nodeType": "InlineAssembly",
                            "src": "3960:371:14"
                          },
                          {
                            "expression": {
                              "id": 2107,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2103,
                                "name": "prod0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2066,
                                "src": "4397:5:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "|=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2106,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2104,
                                  "name": "prod1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2069,
                                  "src": "4406:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 2105,
                                  "name": "twos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2093,
                                  "src": "4414:4:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4406:12:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4397:21:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2108,
                            "nodeType": "ExpressionStatement",
                            "src": "4397:21:14"
                          },
                          {
                            "assignments": [
                              2110
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2110,
                                "mutability": "mutable",
                                "name": "inverse",
                                "nameLocation": "4744:7:14",
                                "nodeType": "VariableDeclaration",
                                "scope": 2174,
                                "src": "4736:15:14",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2109,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4736:7:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2117,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2116,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2113,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "33",
                                      "id": 2111,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4755:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 2112,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2060,
                                      "src": "4759:11:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "4755:15:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 2114,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4754:17:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "^",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 2115,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4774:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "4754:21:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "4736:39:14"
                          },
                          {
                            "expression": {
                              "id": 2124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2118,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2110,
                                "src": "4992:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2123,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 2119,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5003:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2122,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2120,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2060,
                                    "src": "5007:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 2121,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2110,
                                    "src": "5021:7:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5007:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5003:25:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4992:36:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2125,
                            "nodeType": "ExpressionStatement",
                            "src": "4992:36:14"
                          },
                          {
                            "expression": {
                              "id": 2132,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2126,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2110,
                                "src": "5061:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2131,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 2127,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5072:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2130,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2128,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2060,
                                    "src": "5076:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 2129,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2110,
                                    "src": "5090:7:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5076:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5072:25:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5061:36:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2133,
                            "nodeType": "ExpressionStatement",
                            "src": "5061:36:14"
                          },
                          {
                            "expression": {
                              "id": 2140,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2134,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2110,
                                "src": "5131:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2139,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 2135,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5142:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2138,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2136,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2060,
                                    "src": "5146:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 2137,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2110,
                                    "src": "5160:7:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5146:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5142:25:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5131:36:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2141,
                            "nodeType": "ExpressionStatement",
                            "src": "5131:36:14"
                          },
                          {
                            "expression": {
                              "id": 2148,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2142,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2110,
                                "src": "5201:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2147,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 2143,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5212:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2146,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2144,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2060,
                                    "src": "5216:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 2145,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2110,
                                    "src": "5230:7:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5216:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5212:25:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5201:36:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2149,
                            "nodeType": "ExpressionStatement",
                            "src": "5201:36:14"
                          },
                          {
                            "expression": {
                              "id": 2156,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2150,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2110,
                                "src": "5271:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2155,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 2151,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5282:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2154,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2152,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2060,
                                    "src": "5286:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 2153,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2110,
                                    "src": "5300:7:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5286:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5282:25:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5271:36:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2157,
                            "nodeType": "ExpressionStatement",
                            "src": "5271:36:14"
                          },
                          {
                            "expression": {
                              "id": 2164,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2158,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2110,
                                "src": "5342:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2163,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 2159,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5353:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2162,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2160,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2060,
                                    "src": "5357:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 2161,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2110,
                                    "src": "5371:7:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5357:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5353:25:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5342:36:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2165,
                            "nodeType": "ExpressionStatement",
                            "src": "5342:36:14"
                          },
                          {
                            "expression": {
                              "id": 2170,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2166,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2063,
                                "src": "5812:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2169,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2167,
                                  "name": "prod0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2066,
                                  "src": "5821:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 2168,
                                  "name": "inverse",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2110,
                                  "src": "5829:7:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5821:15:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5812:24:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2171,
                            "nodeType": "ExpressionStatement",
                            "src": "5812:24:14"
                          },
                          {
                            "expression": {
                              "id": 2172,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2063,
                              "src": "5857:6:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 2064,
                            "id": 2173,
                            "nodeType": "Return",
                            "src": "5850:13:14"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2054,
                    "nodeType": "StructuredDocumentation",
                    "src": "1357:305:14",
                    "text": " @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n with further edits by Uniswap Labs also under MIT license."
                  },
                  "id": 2176,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDiv",
                  "nameLocation": "1676:6:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2061,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2056,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "1691:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2176,
                        "src": "1683:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2055,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1683:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2058,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "1702:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2176,
                        "src": "1694:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2057,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1694:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2060,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "1713:11:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2176,
                        "src": "1705:19:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2059,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1705:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1682:43:14"
                  },
                  "returnParameters": {
                    "id": 2064,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2063,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "1757:6:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2176,
                        "src": "1749:14:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2062,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1749:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1748:16:14"
                  },
                  "scope": 2828,
                  "src": "1667:4213:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2219,
                    "nodeType": "Block",
                    "src": "6122:189:14",
                    "statements": [
                      {
                        "assignments": [
                          2192
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2192,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "6140:6:14",
                            "nodeType": "VariableDeclaration",
                            "scope": 2219,
                            "src": "6132:14:14",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2191,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6132:7:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2198,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 2194,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2179,
                              "src": "6156:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 2195,
                              "name": "y",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2181,
                              "src": "6159:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 2196,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2183,
                              "src": "6162:11:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2193,
                            "name": "mulDiv",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2176,
                              2220
                            ],
                            "referencedDeclaration": 2176,
                            "src": "6149:6:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2197,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6149:25:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6132:42:14"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_enum$_Rounding_$1969",
                              "typeString": "enum Math.Rounding"
                            },
                            "id": 2202,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2199,
                              "name": "rounding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2186,
                              "src": "6188:8:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Rounding_$1969",
                                "typeString": "enum Math.Rounding"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "id": 2200,
                                "name": "Rounding",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1969,
                                "src": "6200:8:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Rounding_$1969_$",
                                  "typeString": "type(enum Math.Rounding)"
                                }
                              },
                              "id": 2201,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Up",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1967,
                              "src": "6200:11:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Rounding_$1969",
                                "typeString": "enum Math.Rounding"
                              }
                            },
                            "src": "6188:23:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2209,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 2204,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2179,
                                  "src": "6222:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 2205,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2181,
                                  "src": "6225:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 2206,
                                  "name": "denominator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2183,
                                  "src": "6228:11:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2203,
                                "name": "mulmod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -16,
                                "src": "6215:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2207,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6215:25:14",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 2208,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6243:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "6215:29:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6188:56:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2216,
                        "nodeType": "IfStatement",
                        "src": "6184:98:14",
                        "trueBody": {
                          "id": 2215,
                          "nodeType": "Block",
                          "src": "6246:36:14",
                          "statements": [
                            {
                              "expression": {
                                "id": 2213,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2211,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2192,
                                  "src": "6260:6:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "31",
                                  "id": 2212,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6270:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "6260:11:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2214,
                              "nodeType": "ExpressionStatement",
                              "src": "6260:11:14"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 2217,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2192,
                          "src": "6298:6:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2190,
                        "id": 2218,
                        "nodeType": "Return",
                        "src": "6291:13:14"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2177,
                    "nodeType": "StructuredDocumentation",
                    "src": "5886:121:14",
                    "text": " @notice Calculates x * y / denominator with full precision, following the selected rounding direction."
                  },
                  "id": 2220,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDiv",
                  "nameLocation": "6021:6:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2187,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2179,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "6036:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2220,
                        "src": "6028:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2178,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6028:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2181,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "6047:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2220,
                        "src": "6039:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2180,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6039:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2183,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "6058:11:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2220,
                        "src": "6050:19:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2182,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6050:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2186,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "6080:8:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2220,
                        "src": "6071:17:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$1969",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 2185,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2184,
                            "name": "Rounding",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1969,
                            "src": "6071:8:14"
                          },
                          "referencedDeclaration": 1969,
                          "src": "6071:8:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$1969",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6027:62:14"
                  },
                  "returnParameters": {
                    "id": 2190,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2189,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2220,
                        "src": "6113:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2188,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6113:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6112:9:14"
                  },
                  "scope": 2828,
                  "src": "6012:299:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2331,
                    "nodeType": "Block",
                    "src": "6587:1585:14",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2230,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2228,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2223,
                            "src": "6601:1:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2229,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6606:1:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6601:6:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2234,
                        "nodeType": "IfStatement",
                        "src": "6597:45:14",
                        "trueBody": {
                          "id": 2233,
                          "nodeType": "Block",
                          "src": "6609:33:14",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 2231,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6630:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 2227,
                              "id": 2232,
                              "nodeType": "Return",
                              "src": "6623:8:14"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          2236
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2236,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "7329:6:14",
                            "nodeType": "VariableDeclaration",
                            "scope": 2331,
                            "src": "7321:14:14",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2235,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7321:7:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2245,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "31",
                            "id": 2237,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7338:1:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2242,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 2239,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2223,
                                      "src": "7349:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 2238,
                                    "name": "log2",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      2500,
                                      2536
                                    ],
                                    "referencedDeclaration": 2500,
                                    "src": "7344:4:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 2240,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7344:7:14",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2241,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7355:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7344:12:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 2243,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7343:14:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7338:19:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7321:36:14"
                      },
                      {
                        "id": 2330,
                        "nodeType": "UncheckedBlock",
                        "src": "7758:408:14",
                        "statements": [
                          {
                            "expression": {
                              "id": 2255,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2246,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2236,
                                "src": "7782:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2254,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2251,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2247,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2236,
                                        "src": "7792:6:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2250,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2248,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2223,
                                          "src": "7801:1:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 2249,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2236,
                                          "src": "7805:6:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7801:10:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7792:19:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2252,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7791:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2253,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7816:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7791:26:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7782:35:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2256,
                            "nodeType": "ExpressionStatement",
                            "src": "7782:35:14"
                          },
                          {
                            "expression": {
                              "id": 2266,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2257,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2236,
                                "src": "7831:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2262,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2258,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2236,
                                        "src": "7841:6:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2261,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2259,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2223,
                                          "src": "7850:1:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 2260,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2236,
                                          "src": "7854:6:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7850:10:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7841:19:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2263,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7840:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2264,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7865:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7840:26:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7831:35:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2267,
                            "nodeType": "ExpressionStatement",
                            "src": "7831:35:14"
                          },
                          {
                            "expression": {
                              "id": 2277,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2268,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2236,
                                "src": "7880:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2276,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2273,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2269,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2236,
                                        "src": "7890:6:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2272,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2270,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2223,
                                          "src": "7899:1:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 2271,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2236,
                                          "src": "7903:6:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7899:10:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7890:19:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2274,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7889:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2275,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7914:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7889:26:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7880:35:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2278,
                            "nodeType": "ExpressionStatement",
                            "src": "7880:35:14"
                          },
                          {
                            "expression": {
                              "id": 2288,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2279,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2236,
                                "src": "7929:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2287,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2284,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2280,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2236,
                                        "src": "7939:6:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2283,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2281,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2223,
                                          "src": "7948:1:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 2282,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2236,
                                          "src": "7952:6:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7948:10:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7939:19:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2285,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7938:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2286,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7963:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7938:26:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7929:35:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2289,
                            "nodeType": "ExpressionStatement",
                            "src": "7929:35:14"
                          },
                          {
                            "expression": {
                              "id": 2299,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2290,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2236,
                                "src": "7978:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2298,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2295,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2291,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2236,
                                        "src": "7988:6:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2294,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2292,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2223,
                                          "src": "7997:1:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 2293,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2236,
                                          "src": "8001:6:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7997:10:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7988:19:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2296,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7987:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2297,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8012:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7987:26:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7978:35:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2300,
                            "nodeType": "ExpressionStatement",
                            "src": "7978:35:14"
                          },
                          {
                            "expression": {
                              "id": 2310,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2301,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2236,
                                "src": "8027:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2309,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2306,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2302,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2236,
                                        "src": "8037:6:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2305,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2303,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2223,
                                          "src": "8046:1:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 2304,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2236,
                                          "src": "8050:6:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "8046:10:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8037:19:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2307,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8036:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2308,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8061:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "8036:26:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8027:35:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2311,
                            "nodeType": "ExpressionStatement",
                            "src": "8027:35:14"
                          },
                          {
                            "expression": {
                              "id": 2321,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2312,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2236,
                                "src": "8076:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2320,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2317,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2313,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2236,
                                        "src": "8086:6:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2316,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2314,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2223,
                                          "src": "8095:1:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 2315,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2236,
                                          "src": "8099:6:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "8095:10:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8086:19:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2318,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8085:21:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2319,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8110:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "8085:26:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8076:35:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2322,
                            "nodeType": "ExpressionStatement",
                            "src": "8076:35:14"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2324,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2236,
                                  "src": "8136:6:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2327,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2325,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2223,
                                    "src": "8144:1:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "id": 2326,
                                    "name": "result",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2236,
                                    "src": "8148:6:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "8144:10:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2323,
                                "name": "min",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2005,
                                "src": "8132:3:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2328,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8132:23:14",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 2227,
                            "id": 2329,
                            "nodeType": "Return",
                            "src": "8125:30:14"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2221,
                    "nodeType": "StructuredDocumentation",
                    "src": "6317:208:14",
                    "text": " @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11)."
                  },
                  "id": 2332,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sqrt",
                  "nameLocation": "6539:4:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2224,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2223,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "6552:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2332,
                        "src": "6544:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2222,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6544:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6543:11:14"
                  },
                  "returnParameters": {
                    "id": 2227,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2226,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2332,
                        "src": "6578:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2225,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6578:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6577:9:14"
                  },
                  "scope": 2828,
                  "src": "6530:1642:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2367,
                    "nodeType": "Block",
                    "src": "8348:161:14",
                    "statements": [
                      {
                        "id": 2366,
                        "nodeType": "UncheckedBlock",
                        "src": "8358:145:14",
                        "statements": [
                          {
                            "assignments": [
                              2344
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2344,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "8390:6:14",
                                "nodeType": "VariableDeclaration",
                                "scope": 2366,
                                "src": "8382:14:14",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2343,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8382:7:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2348,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 2346,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2335,
                                  "src": "8404:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2345,
                                "name": "sqrt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  2332,
                                  2368
                                ],
                                "referencedDeclaration": 2332,
                                "src": "8399:4:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2347,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8399:7:14",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "8382:24:14"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2364,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2349,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2344,
                                "src": "8427:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 2359,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_enum$_Rounding_$1969",
                                          "typeString": "enum Math.Rounding"
                                        },
                                        "id": 2353,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2350,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2338,
                                          "src": "8437:8:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$1969",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 2351,
                                            "name": "Rounding",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1969,
                                            "src": "8449:8:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Rounding_$1969_$",
                                              "typeString": "type(enum Math.Rounding)"
                                            }
                                          },
                                          "id": 2352,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "Up",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1967,
                                          "src": "8449:11:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$1969",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "src": "8437:23:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&&",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2358,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2356,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 2354,
                                            "name": "result",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2344,
                                            "src": "8464:6:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "id": 2355,
                                            "name": "result",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2344,
                                            "src": "8473:6:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "8464:15:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 2357,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2335,
                                          "src": "8482:1:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "8464:19:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "8437:46:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "hexValue": "30",
                                      "id": 2361,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8490:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "id": 2362,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "8437:54:14",
                                    "trueExpression": {
                                      "hexValue": "31",
                                      "id": 2360,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8486:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 2363,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "8436:56:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "8427:65:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 2342,
                            "id": 2365,
                            "nodeType": "Return",
                            "src": "8420:72:14"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2333,
                    "nodeType": "StructuredDocumentation",
                    "src": "8178:89:14",
                    "text": " @notice Calculates sqrt(a), following the selected rounding direction."
                  },
                  "id": 2368,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sqrt",
                  "nameLocation": "8281:4:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2339,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2335,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "8294:1:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2368,
                        "src": "8286:9:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2334,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8286:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2338,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "8306:8:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2368,
                        "src": "8297:17:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$1969",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 2337,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2336,
                            "name": "Rounding",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1969,
                            "src": "8297:8:14"
                          },
                          "referencedDeclaration": 1969,
                          "src": "8297:8:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$1969",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8285:30:14"
                  },
                  "returnParameters": {
                    "id": 2342,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2341,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2368,
                        "src": "8339:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2340,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8339:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8338:9:14"
                  },
                  "scope": 2828,
                  "src": "8272:237:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2499,
                    "nodeType": "Block",
                    "src": "8694:922:14",
                    "statements": [
                      {
                        "assignments": [
                          2377
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2377,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "8712:6:14",
                            "nodeType": "VariableDeclaration",
                            "scope": 2499,
                            "src": "8704:14:14",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2376,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8704:7:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2379,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 2378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8721:1:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8704:18:14"
                      },
                      {
                        "id": 2496,
                        "nodeType": "UncheckedBlock",
                        "src": "8732:855:14",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2384,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2382,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2380,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "8760:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "313238",
                                  "id": 2381,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8769:3:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_128_by_1",
                                    "typeString": "int_const 128"
                                  },
                                  "value": "128"
                                },
                                "src": "8760:12:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2383,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8775:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "8760:16:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2394,
                            "nodeType": "IfStatement",
                            "src": "8756:99:14",
                            "trueBody": {
                              "id": 2393,
                              "nodeType": "Block",
                              "src": "8778:77:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2387,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2385,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2371,
                                      "src": "8796:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "313238",
                                      "id": 2386,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8806:3:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_128_by_1",
                                        "typeString": "int_const 128"
                                      },
                                      "value": "128"
                                    },
                                    "src": "8796:13:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2388,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8796:13:14"
                                },
                                {
                                  "expression": {
                                    "id": 2391,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2389,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2377,
                                      "src": "8827:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "313238",
                                      "id": 2390,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8837:3:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_128_by_1",
                                        "typeString": "int_const 128"
                                      },
                                      "value": "128"
                                    },
                                    "src": "8827:13:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2392,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8827:13:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2399,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2397,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2395,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "8872:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3634",
                                  "id": 2396,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8881:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "8872:11:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2398,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8886:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "8872:15:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2409,
                            "nodeType": "IfStatement",
                            "src": "8868:96:14",
                            "trueBody": {
                              "id": 2408,
                              "nodeType": "Block",
                              "src": "8889:75:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2402,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2400,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2371,
                                      "src": "8907:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 2401,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8917:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "8907:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2403,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8907:12:14"
                                },
                                {
                                  "expression": {
                                    "id": 2406,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2404,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2377,
                                      "src": "8937:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 2405,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8947:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "8937:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2407,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8937:12:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2414,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2412,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2410,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "8981:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 2411,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8990:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "8981:11:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2413,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8995:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "8981:15:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2424,
                            "nodeType": "IfStatement",
                            "src": "8977:96:14",
                            "trueBody": {
                              "id": 2423,
                              "nodeType": "Block",
                              "src": "8998:75:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2417,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2415,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2371,
                                      "src": "9016:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 2416,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9026:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "9016:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2418,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9016:12:14"
                                },
                                {
                                  "expression": {
                                    "id": 2421,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2419,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2377,
                                      "src": "9046:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 2420,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9056:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "9046:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2422,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9046:12:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2429,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2427,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2425,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "9090:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3136",
                                  "id": 2426,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9099:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "9090:11:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2428,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9104:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "9090:15:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2439,
                            "nodeType": "IfStatement",
                            "src": "9086:96:14",
                            "trueBody": {
                              "id": 2438,
                              "nodeType": "Block",
                              "src": "9107:75:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2432,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2430,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2371,
                                      "src": "9125:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 2431,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9135:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "9125:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2433,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9125:12:14"
                                },
                                {
                                  "expression": {
                                    "id": 2436,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2434,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2377,
                                      "src": "9155:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 2435,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9165:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "9155:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2437,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9155:12:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2444,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2442,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2440,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "9199:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "38",
                                  "id": 2441,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9208:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "9199:10:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2443,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9212:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "9199:14:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2454,
                            "nodeType": "IfStatement",
                            "src": "9195:93:14",
                            "trueBody": {
                              "id": 2453,
                              "nodeType": "Block",
                              "src": "9215:73:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2447,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2445,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2371,
                                      "src": "9233:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 2446,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9243:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "9233:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2448,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9233:11:14"
                                },
                                {
                                  "expression": {
                                    "id": 2451,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2449,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2377,
                                      "src": "9262:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 2450,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9272:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "9262:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2452,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9262:11:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2459,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2457,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2455,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "9305:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "34",
                                  "id": 2456,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9314:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "9305:10:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2458,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9318:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "9305:14:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2469,
                            "nodeType": "IfStatement",
                            "src": "9301:93:14",
                            "trueBody": {
                              "id": 2468,
                              "nodeType": "Block",
                              "src": "9321:73:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2462,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2460,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2371,
                                      "src": "9339:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 2461,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9349:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "9339:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2463,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9339:11:14"
                                },
                                {
                                  "expression": {
                                    "id": 2466,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2464,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2377,
                                      "src": "9368:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 2465,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9378:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "9368:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2467,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9368:11:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2474,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2472,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2470,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "9411:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 2471,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9420:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "9411:10:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2473,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9424:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "9411:14:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2484,
                            "nodeType": "IfStatement",
                            "src": "9407:93:14",
                            "trueBody": {
                              "id": 2483,
                              "nodeType": "Block",
                              "src": "9427:73:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2477,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2475,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2371,
                                      "src": "9445:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 2476,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9455:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "9445:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2478,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9445:11:14"
                                },
                                {
                                  "expression": {
                                    "id": 2481,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2479,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2377,
                                      "src": "9474:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 2480,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9484:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "9474:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2482,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9474:11:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2489,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2487,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2485,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "9517:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2486,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9526:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "9517:10:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2488,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9530:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "9517:14:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2495,
                            "nodeType": "IfStatement",
                            "src": "9513:64:14",
                            "trueBody": {
                              "id": 2494,
                              "nodeType": "Block",
                              "src": "9533:44:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2492,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2490,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2377,
                                      "src": "9551:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 2491,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9561:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "9551:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2493,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9551:11:14"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 2497,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2377,
                          "src": "9603:6:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2375,
                        "id": 2498,
                        "nodeType": "Return",
                        "src": "9596:13:14"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2369,
                    "nodeType": "StructuredDocumentation",
                    "src": "8515:113:14",
                    "text": " @dev Return the log in base 2, rounded down, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 2500,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log2",
                  "nameLocation": "8642:4:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2372,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2371,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "8655:5:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2500,
                        "src": "8647:13:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2370,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8647:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8646:15:14"
                  },
                  "returnParameters": {
                    "id": 2375,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2374,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2500,
                        "src": "8685:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2373,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8685:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8684:9:14"
                  },
                  "scope": 2828,
                  "src": "8633:983:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2535,
                    "nodeType": "Block",
                    "src": "9849:165:14",
                    "statements": [
                      {
                        "id": 2534,
                        "nodeType": "UncheckedBlock",
                        "src": "9859:149:14",
                        "statements": [
                          {
                            "assignments": [
                              2512
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2512,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "9891:6:14",
                                "nodeType": "VariableDeclaration",
                                "scope": 2534,
                                "src": "9883:14:14",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2511,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9883:7:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2516,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 2514,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2503,
                                  "src": "9905:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2513,
                                "name": "log2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  2500,
                                  2536
                                ],
                                "referencedDeclaration": 2500,
                                "src": "9900:4:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2515,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9900:11:14",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "9883:28:14"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2517,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2512,
                                "src": "9932:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 2527,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_enum$_Rounding_$1969",
                                          "typeString": "enum Math.Rounding"
                                        },
                                        "id": 2521,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2518,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2506,
                                          "src": "9942:8:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$1969",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 2519,
                                            "name": "Rounding",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1969,
                                            "src": "9954:8:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Rounding_$1969_$",
                                              "typeString": "type(enum Math.Rounding)"
                                            }
                                          },
                                          "id": 2520,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "Up",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1967,
                                          "src": "9954:11:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$1969",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "src": "9942:23:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&&",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2526,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2524,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "hexValue": "31",
                                            "id": 2522,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "9969:1:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "<<",
                                          "rightExpression": {
                                            "id": 2523,
                                            "name": "result",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2512,
                                            "src": "9974:6:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "9969:11:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 2525,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2503,
                                          "src": "9983:5:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "9969:19:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "9942:46:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "hexValue": "30",
                                      "id": 2529,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9995:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "id": 2530,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "9942:54:14",
                                    "trueExpression": {
                                      "hexValue": "31",
                                      "id": 2528,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9991:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 2531,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "9941:56:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "9932:65:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 2510,
                            "id": 2533,
                            "nodeType": "Return",
                            "src": "9925:72:14"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2501,
                    "nodeType": "StructuredDocumentation",
                    "src": "9622:142:14",
                    "text": " @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 2536,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log2",
                  "nameLocation": "9778:4:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2507,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2503,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9791:5:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2536,
                        "src": "9783:13:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2502,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9783:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2506,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "9807:8:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2536,
                        "src": "9798:17:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$1969",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 2505,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2504,
                            "name": "Rounding",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1969,
                            "src": "9798:8:14"
                          },
                          "referencedDeclaration": 1969,
                          "src": "9798:8:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$1969",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9782:34:14"
                  },
                  "returnParameters": {
                    "id": 2510,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2509,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2536,
                        "src": "9840:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2508,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9840:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9839:9:14"
                  },
                  "scope": 2828,
                  "src": "9769:245:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2664,
                    "nodeType": "Block",
                    "src": "10201:854:14",
                    "statements": [
                      {
                        "assignments": [
                          2545
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2545,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "10219:6:14",
                            "nodeType": "VariableDeclaration",
                            "scope": 2664,
                            "src": "10211:14:14",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2544,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10211:7:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2547,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 2546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10228:1:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10211:18:14"
                      },
                      {
                        "id": 2661,
                        "nodeType": "UncheckedBlock",
                        "src": "10239:787:14",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2552,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2548,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2539,
                                "src": "10267:5:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(57 digits omitted)...0000"
                                },
                                "id": 2551,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 2549,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10276:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3634",
                                  "id": 2550,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10282:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "10276:8:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(57 digits omitted)...0000"
                                }
                              },
                              "src": "10267:17:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2564,
                            "nodeType": "IfStatement",
                            "src": "10263:103:14",
                            "trueBody": {
                              "id": 2563,
                              "nodeType": "Block",
                              "src": "10286:80:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2557,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2553,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2539,
                                      "src": "10304:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(57 digits omitted)...0000"
                                      },
                                      "id": 2556,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 2554,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10313:2:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3634",
                                        "id": 2555,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10319:2:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_64_by_1",
                                          "typeString": "int_const 64"
                                        },
                                        "value": "64"
                                      },
                                      "src": "10313:8:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(57 digits omitted)...0000"
                                      }
                                    },
                                    "src": "10304:17:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2558,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10304:17:14"
                                },
                                {
                                  "expression": {
                                    "id": 2561,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2559,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2545,
                                      "src": "10339:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 2560,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10349:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "10339:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2562,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10339:12:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2569,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2565,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2539,
                                "src": "10383:5:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(25 digits omitted)...0000"
                                },
                                "id": 2568,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 2566,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10392:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 2567,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10398:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "10392:8:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(25 digits omitted)...0000"
                                }
                              },
                              "src": "10383:17:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2581,
                            "nodeType": "IfStatement",
                            "src": "10379:103:14",
                            "trueBody": {
                              "id": 2580,
                              "nodeType": "Block",
                              "src": "10402:80:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2574,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2570,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2539,
                                      "src": "10420:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(25 digits omitted)...0000"
                                      },
                                      "id": 2573,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 2571,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10429:2:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3332",
                                        "id": 2572,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10435:2:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_32_by_1",
                                          "typeString": "int_const 32"
                                        },
                                        "value": "32"
                                      },
                                      "src": "10429:8:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(25 digits omitted)...0000"
                                      }
                                    },
                                    "src": "10420:17:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2575,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10420:17:14"
                                },
                                {
                                  "expression": {
                                    "id": 2578,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2576,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2545,
                                      "src": "10455:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 2577,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10465:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "10455:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2579,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10455:12:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2586,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2582,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2539,
                                "src": "10499:5:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10000000000000000_by_1",
                                  "typeString": "int_const 10000000000000000"
                                },
                                "id": 2585,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 2583,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10508:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3136",
                                  "id": 2584,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10514:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "10508:8:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000000000000000_by_1",
                                  "typeString": "int_const 10000000000000000"
                                }
                              },
                              "src": "10499:17:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2598,
                            "nodeType": "IfStatement",
                            "src": "10495:103:14",
                            "trueBody": {
                              "id": 2597,
                              "nodeType": "Block",
                              "src": "10518:80:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2591,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2587,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2539,
                                      "src": "10536:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      },
                                      "id": 2590,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 2588,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10545:2:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3136",
                                        "id": 2589,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10551:2:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_16_by_1",
                                          "typeString": "int_const 16"
                                        },
                                        "value": "16"
                                      },
                                      "src": "10545:8:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      }
                                    },
                                    "src": "10536:17:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2592,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10536:17:14"
                                },
                                {
                                  "expression": {
                                    "id": 2595,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2593,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2545,
                                      "src": "10571:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 2594,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10581:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "10571:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2596,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10571:12:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2603,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2599,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2539,
                                "src": "10615:5:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_100000000_by_1",
                                  "typeString": "int_const 100000000"
                                },
                                "id": 2602,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 2600,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10624:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "38",
                                  "id": 2601,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10630:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "10624:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100000000_by_1",
                                  "typeString": "int_const 100000000"
                                }
                              },
                              "src": "10615:16:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2615,
                            "nodeType": "IfStatement",
                            "src": "10611:100:14",
                            "trueBody": {
                              "id": 2614,
                              "nodeType": "Block",
                              "src": "10633:78:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2608,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2604,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2539,
                                      "src": "10651:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      },
                                      "id": 2607,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 2605,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10660:2:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "38",
                                        "id": 2606,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10666:1:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_8_by_1",
                                          "typeString": "int_const 8"
                                        },
                                        "value": "8"
                                      },
                                      "src": "10660:7:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      }
                                    },
                                    "src": "10651:16:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2609,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10651:16:14"
                                },
                                {
                                  "expression": {
                                    "id": 2612,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2610,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2545,
                                      "src": "10685:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 2611,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10695:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "10685:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2613,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10685:11:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2620,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2616,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2539,
                                "src": "10728:5:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                },
                                "id": 2619,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 2617,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10737:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "34",
                                  "id": 2618,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10743:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "10737:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                }
                              },
                              "src": "10728:16:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2632,
                            "nodeType": "IfStatement",
                            "src": "10724:100:14",
                            "trueBody": {
                              "id": 2631,
                              "nodeType": "Block",
                              "src": "10746:78:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2625,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2621,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2539,
                                      "src": "10764:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_10000_by_1",
                                        "typeString": "int_const 10000"
                                      },
                                      "id": 2624,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 2622,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10773:2:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "34",
                                        "id": 2623,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10779:1:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "10773:7:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000_by_1",
                                        "typeString": "int_const 10000"
                                      }
                                    },
                                    "src": "10764:16:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2626,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10764:16:14"
                                },
                                {
                                  "expression": {
                                    "id": 2629,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2627,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2545,
                                      "src": "10798:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 2628,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10808:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "10798:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2630,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10798:11:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2637,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2633,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2539,
                                "src": "10841:5:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_100_by_1",
                                  "typeString": "int_const 100"
                                },
                                "id": 2636,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 2634,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10850:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 2635,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10856:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "10850:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100_by_1",
                                  "typeString": "int_const 100"
                                }
                              },
                              "src": "10841:16:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2649,
                            "nodeType": "IfStatement",
                            "src": "10837:100:14",
                            "trueBody": {
                              "id": 2648,
                              "nodeType": "Block",
                              "src": "10859:78:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2642,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2638,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2539,
                                      "src": "10877:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100_by_1",
                                        "typeString": "int_const 100"
                                      },
                                      "id": 2641,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 2639,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10886:2:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "32",
                                        "id": 2640,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10892:1:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_2_by_1",
                                          "typeString": "int_const 2"
                                        },
                                        "value": "2"
                                      },
                                      "src": "10886:7:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100_by_1",
                                        "typeString": "int_const 100"
                                      }
                                    },
                                    "src": "10877:16:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2643,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10877:16:14"
                                },
                                {
                                  "expression": {
                                    "id": 2646,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2644,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2545,
                                      "src": "10911:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 2645,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10921:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "10911:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2647,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10911:11:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2654,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2650,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2539,
                                "src": "10954:5:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                },
                                "id": 2653,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 2651,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10963:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2652,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10969:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "10963:7:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                }
                              },
                              "src": "10954:16:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2660,
                            "nodeType": "IfStatement",
                            "src": "10950:66:14",
                            "trueBody": {
                              "id": 2659,
                              "nodeType": "Block",
                              "src": "10972:44:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2657,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2655,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2545,
                                      "src": "10990:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 2656,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11000:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "10990:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2658,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10990:11:14"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 2662,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2545,
                          "src": "11042:6:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2543,
                        "id": 2663,
                        "nodeType": "Return",
                        "src": "11035:13:14"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2537,
                    "nodeType": "StructuredDocumentation",
                    "src": "10020:114:14",
                    "text": " @dev Return the log in base 10, rounded down, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 2665,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log10",
                  "nameLocation": "10148:5:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2540,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2539,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "10162:5:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2665,
                        "src": "10154:13:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2538,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10154:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10153:15:14"
                  },
                  "returnParameters": {
                    "id": 2543,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2542,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2665,
                        "src": "10192:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2541,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10192:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10191:9:14"
                  },
                  "scope": 2828,
                  "src": "10139:916:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2700,
                    "nodeType": "Block",
                    "src": "11290:167:14",
                    "statements": [
                      {
                        "id": 2699,
                        "nodeType": "UncheckedBlock",
                        "src": "11300:151:14",
                        "statements": [
                          {
                            "assignments": [
                              2677
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2677,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "11332:6:14",
                                "nodeType": "VariableDeclaration",
                                "scope": 2699,
                                "src": "11324:14:14",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2676,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11324:7:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2681,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 2679,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2668,
                                  "src": "11347:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2678,
                                "name": "log10",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  2665,
                                  2701
                                ],
                                "referencedDeclaration": 2665,
                                "src": "11341:5:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2680,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11341:12:14",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "11324:29:14"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2682,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2677,
                                "src": "11374:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 2692,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_enum$_Rounding_$1969",
                                          "typeString": "enum Math.Rounding"
                                        },
                                        "id": 2686,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2683,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2671,
                                          "src": "11384:8:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$1969",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 2684,
                                            "name": "Rounding",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1969,
                                            "src": "11396:8:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Rounding_$1969_$",
                                              "typeString": "type(enum Math.Rounding)"
                                            }
                                          },
                                          "id": 2685,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "Up",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1967,
                                          "src": "11396:11:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$1969",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "src": "11384:23:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&&",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2691,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2689,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "hexValue": "3130",
                                            "id": 2687,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "11411:2:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_10_by_1",
                                              "typeString": "int_const 10"
                                            },
                                            "value": "10"
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "**",
                                          "rightExpression": {
                                            "id": 2688,
                                            "name": "result",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2677,
                                            "src": "11417:6:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "11411:12:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 2690,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2668,
                                          "src": "11426:5:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "11411:20:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "11384:47:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "hexValue": "30",
                                      "id": 2694,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11438:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "id": 2695,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "11384:55:14",
                                    "trueExpression": {
                                      "hexValue": "31",
                                      "id": 2693,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11434:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 2696,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "11383:57:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "11374:66:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 2675,
                            "id": 2698,
                            "nodeType": "Return",
                            "src": "11367:73:14"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2666,
                    "nodeType": "StructuredDocumentation",
                    "src": "11061:143:14",
                    "text": " @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 2701,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log10",
                  "nameLocation": "11218:5:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2672,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2668,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "11232:5:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2701,
                        "src": "11224:13:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2667,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11224:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2671,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "11248:8:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2701,
                        "src": "11239:17:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$1969",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 2670,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2669,
                            "name": "Rounding",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1969,
                            "src": "11239:8:14"
                          },
                          "referencedDeclaration": 1969,
                          "src": "11239:8:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$1969",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11223:34:14"
                  },
                  "returnParameters": {
                    "id": 2675,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2674,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2701,
                        "src": "11281:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2673,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11281:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11280:9:14"
                  },
                  "scope": 2828,
                  "src": "11209:248:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2787,
                    "nodeType": "Block",
                    "src": "11771:600:14",
                    "statements": [
                      {
                        "assignments": [
                          2710
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2710,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "11789:6:14",
                            "nodeType": "VariableDeclaration",
                            "scope": 2787,
                            "src": "11781:14:14",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2709,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "11781:7:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2712,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 2711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11798:1:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "11781:18:14"
                      },
                      {
                        "id": 2784,
                        "nodeType": "UncheckedBlock",
                        "src": "11809:533:14",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2717,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2715,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2713,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2704,
                                  "src": "11837:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "313238",
                                  "id": 2714,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11846:3:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_128_by_1",
                                    "typeString": "int_const 128"
                                  },
                                  "value": "128"
                                },
                                "src": "11837:12:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2716,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11852:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "11837:16:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2727,
                            "nodeType": "IfStatement",
                            "src": "11833:98:14",
                            "trueBody": {
                              "id": 2726,
                              "nodeType": "Block",
                              "src": "11855:76:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2720,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2718,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2704,
                                      "src": "11873:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "313238",
                                      "id": 2719,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11883:3:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_128_by_1",
                                        "typeString": "int_const 128"
                                      },
                                      "value": "128"
                                    },
                                    "src": "11873:13:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2721,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11873:13:14"
                                },
                                {
                                  "expression": {
                                    "id": 2724,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2722,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2710,
                                      "src": "11904:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 2723,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11914:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "11904:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2725,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11904:12:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2732,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2730,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2728,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2704,
                                  "src": "11948:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3634",
                                  "id": 2729,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11957:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "11948:11:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2731,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11962:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "11948:15:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2742,
                            "nodeType": "IfStatement",
                            "src": "11944:95:14",
                            "trueBody": {
                              "id": 2741,
                              "nodeType": "Block",
                              "src": "11965:74:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2735,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2733,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2704,
                                      "src": "11983:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 2734,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11993:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "11983:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2736,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11983:12:14"
                                },
                                {
                                  "expression": {
                                    "id": 2739,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2737,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2710,
                                      "src": "12013:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 2738,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12023:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "12013:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2740,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12013:11:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2747,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2745,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2743,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2704,
                                  "src": "12056:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 2744,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12065:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "12056:11:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2746,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12070:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "12056:15:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2757,
                            "nodeType": "IfStatement",
                            "src": "12052:95:14",
                            "trueBody": {
                              "id": 2756,
                              "nodeType": "Block",
                              "src": "12073:74:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2750,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2748,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2704,
                                      "src": "12091:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 2749,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12101:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "12091:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2751,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12091:12:14"
                                },
                                {
                                  "expression": {
                                    "id": 2754,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2752,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2710,
                                      "src": "12121:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 2753,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12131:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "12121:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2755,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12121:11:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2762,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2760,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2758,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2704,
                                  "src": "12164:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3136",
                                  "id": 2759,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12173:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "12164:11:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2761,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12178:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "12164:15:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2772,
                            "nodeType": "IfStatement",
                            "src": "12160:95:14",
                            "trueBody": {
                              "id": 2771,
                              "nodeType": "Block",
                              "src": "12181:74:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2765,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2763,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2704,
                                      "src": "12199:5:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 2764,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12209:2:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "12199:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2766,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12199:12:14"
                                },
                                {
                                  "expression": {
                                    "id": 2769,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2767,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2710,
                                      "src": "12229:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 2768,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12239:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "12229:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2770,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12229:11:14"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2777,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2775,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2773,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2704,
                                  "src": "12272:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "38",
                                  "id": 2774,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12281:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "12272:10:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2776,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12285:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "12272:14:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2783,
                            "nodeType": "IfStatement",
                            "src": "12268:64:14",
                            "trueBody": {
                              "id": 2782,
                              "nodeType": "Block",
                              "src": "12288:44:14",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2780,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2778,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2710,
                                      "src": "12306:6:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 2779,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12316:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "12306:11:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2781,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12306:11:14"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 2785,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2710,
                          "src": "12358:6:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2708,
                        "id": 2786,
                        "nodeType": "Return",
                        "src": "12351:13:14"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2702,
                    "nodeType": "StructuredDocumentation",
                    "src": "11463:240:14",
                    "text": " @dev Return the log in base 256, rounded down, of a positive value.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."
                  },
                  "id": 2788,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log256",
                  "nameLocation": "11717:6:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2705,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2704,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "11732:5:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2788,
                        "src": "11724:13:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2703,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11724:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11723:15:14"
                  },
                  "returnParameters": {
                    "id": 2708,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2707,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2788,
                        "src": "11762:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2706,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11762:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11761:9:14"
                  },
                  "scope": 2828,
                  "src": "11708:663:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2826,
                    "nodeType": "Block",
                    "src": "12608:174:14",
                    "statements": [
                      {
                        "id": 2825,
                        "nodeType": "UncheckedBlock",
                        "src": "12618:158:14",
                        "statements": [
                          {
                            "assignments": [
                              2800
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2800,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "12650:6:14",
                                "nodeType": "VariableDeclaration",
                                "scope": 2825,
                                "src": "12642:14:14",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2799,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12642:7:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2804,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 2802,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2791,
                                  "src": "12666:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2801,
                                "name": "log256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  2788,
                                  2827
                                ],
                                "referencedDeclaration": 2788,
                                "src": "12659:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2803,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12659:13:14",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "12642:30:14"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2823,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2805,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2800,
                                "src": "12693:6:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 2818,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_enum$_Rounding_$1969",
                                          "typeString": "enum Math.Rounding"
                                        },
                                        "id": 2809,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2806,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2794,
                                          "src": "12703:8:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$1969",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 2807,
                                            "name": "Rounding",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1969,
                                            "src": "12715:8:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Rounding_$1969_$",
                                              "typeString": "type(enum Math.Rounding)"
                                            }
                                          },
                                          "id": 2808,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "Up",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1967,
                                          "src": "12715:11:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$1969",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "src": "12703:23:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&&",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2817,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2815,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "hexValue": "31",
                                            "id": 2810,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "12730:1:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "<<",
                                          "rightExpression": {
                                            "components": [
                                              {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 2813,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "id": 2811,
                                                  "name": "result",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 2800,
                                                  "src": "12736:6:14",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<<",
                                                "rightExpression": {
                                                  "hexValue": "33",
                                                  "id": 2812,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "12746:1:14",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_3_by_1",
                                                    "typeString": "int_const 3"
                                                  },
                                                  "value": "3"
                                                },
                                                "src": "12736:11:14",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "id": 2814,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "TupleExpression",
                                            "src": "12735:13:14",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "12730:18:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 2816,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2791,
                                          "src": "12751:5:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "12730:26:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "12703:53:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "hexValue": "30",
                                      "id": 2820,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12763:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "id": 2821,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "12703:61:14",
                                    "trueExpression": {
                                      "hexValue": "31",
                                      "id": 2819,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12759:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 2822,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "12702:63:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "12693:72:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 2798,
                            "id": 2824,
                            "nodeType": "Return",
                            "src": "12686:79:14"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2789,
                    "nodeType": "StructuredDocumentation",
                    "src": "12377:144:14",
                    "text": " @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 2827,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log256",
                  "nameLocation": "12535:6:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2795,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2791,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "12550:5:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2827,
                        "src": "12542:13:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2790,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12542:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2794,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "12566:8:14",
                        "nodeType": "VariableDeclaration",
                        "scope": 2827,
                        "src": "12557:17:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$1969",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 2793,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2792,
                            "name": "Rounding",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1969,
                            "src": "12557:8:14"
                          },
                          "referencedDeclaration": 1969,
                          "src": "12557:8:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$1969",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12541:34:14"
                  },
                  "returnParameters": {
                    "id": 2798,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2797,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2827,
                        "src": "12599:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2796,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12599:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12598:9:14"
                  },
                  "scope": 2828,
                  "src": "12526:256:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 2829,
              "src": "202:12582:14",
              "usedErrors": []
            }
          ],
          "src": "103:12682:14"
        },
        "id": 14
      },
      "@openzeppelin/contracts/utils/math/SignedMath.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/math/SignedMath.sol",
          "exportedSymbols": {
            "SignedMath": [
              2933
            ]
          },
          "id": 2934,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2830,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "109:23:15"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 2831,
                "nodeType": "StructuredDocumentation",
                "src": "134:80:15",
                "text": " @dev Standard signed math utilities missing in the Solidity language."
              },
              "fullyImplemented": true,
              "id": 2933,
              "linearizedBaseContracts": [
                2933
              ],
              "name": "SignedMath",
              "nameLocation": "223:10:15",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 2848,
                    "nodeType": "Block",
                    "src": "375:37:15",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "id": 2843,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2841,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2834,
                              "src": "392:1:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 2842,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2836,
                              "src": "396:1:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "src": "392:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "id": 2845,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2836,
                            "src": "404:1:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "id": 2846,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "392:13:15",
                          "trueExpression": {
                            "id": 2844,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2834,
                            "src": "400:1:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 2840,
                        "id": 2847,
                        "nodeType": "Return",
                        "src": "385:20:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2832,
                    "nodeType": "StructuredDocumentation",
                    "src": "240:66:15",
                    "text": " @dev Returns the largest of two signed numbers."
                  },
                  "id": 2849,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "max",
                  "nameLocation": "320:3:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2837,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2834,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "331:1:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2849,
                        "src": "324:8:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2833,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "324:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2836,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "341:1:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2849,
                        "src": "334:8:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2835,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "334:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "323:20:15"
                  },
                  "returnParameters": {
                    "id": 2840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2839,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2849,
                        "src": "367:6:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2838,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "367:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "366:8:15"
                  },
                  "scope": 2933,
                  "src": "311:101:15",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2866,
                    "nodeType": "Block",
                    "src": "554:37:15",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "id": 2861,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2859,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2852,
                              "src": "571:1:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 2860,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2854,
                              "src": "575:1:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "src": "571:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "id": 2863,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2854,
                            "src": "583:1:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "id": 2864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "571:13:15",
                          "trueExpression": {
                            "id": 2862,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2852,
                            "src": "579:1:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 2858,
                        "id": 2865,
                        "nodeType": "Return",
                        "src": "564:20:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2850,
                    "nodeType": "StructuredDocumentation",
                    "src": "418:67:15",
                    "text": " @dev Returns the smallest of two signed numbers."
                  },
                  "id": 2867,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "min",
                  "nameLocation": "499:3:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2855,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2852,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "510:1:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2867,
                        "src": "503:8:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2851,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "503:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2854,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "520:1:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2867,
                        "src": "513:8:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2853,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "513:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "502:20:15"
                  },
                  "returnParameters": {
                    "id": 2858,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2857,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2867,
                        "src": "546:6:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2856,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "546:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "545:8:15"
                  },
                  "scope": 2933,
                  "src": "490:101:15",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2910,
                    "nodeType": "Block",
                    "src": "796:162:15",
                    "statements": [
                      {
                        "assignments": [
                          2878
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2878,
                            "mutability": "mutable",
                            "name": "x",
                            "nameLocation": "865:1:15",
                            "nodeType": "VariableDeclaration",
                            "scope": 2910,
                            "src": "858:8:15",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2877,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "858:6:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2891,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 2890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 2881,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2879,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2870,
                                  "src": "870:1:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "id": 2880,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2872,
                                  "src": "874:1:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "870:5:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "id": 2882,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "869:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 2888,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 2885,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2883,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2870,
                                        "src": "881:1:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "^",
                                      "rightExpression": {
                                        "id": 2884,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2872,
                                        "src": "885:1:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "881:5:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "id": 2886,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "880:7:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2887,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "891:1:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "880:12:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "id": 2889,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "879:14:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "869:24:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "858:35:15"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 2908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2892,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2878,
                            "src": "910:1:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 2906,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2900,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "arguments": [
                                          {
                                            "id": 2897,
                                            "name": "x",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2878,
                                            "src": "930:1:15",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          ],
                                          "id": 2896,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "922:7:15",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": {
                                            "id": 2895,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "922:7:15",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 2898,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "922:10:15",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">>",
                                      "rightExpression": {
                                        "hexValue": "323535",
                                        "id": 2899,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "936:3:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_255_by_1",
                                          "typeString": "int_const 255"
                                        },
                                        "value": "255"
                                      },
                                      "src": "922:17:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 2894,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "915:6:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 2893,
                                      "name": "int256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "915:6:15",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 2901,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "915:25:15",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 2904,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2902,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2870,
                                        "src": "944:1:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "^",
                                      "rightExpression": {
                                        "id": 2903,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2872,
                                        "src": "948:1:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "944:5:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "id": 2905,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "943:7:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "915:35:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "id": 2907,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "914:37:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "910:41:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 2876,
                        "id": 2909,
                        "nodeType": "Return",
                        "src": "903:48:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2868,
                    "nodeType": "StructuredDocumentation",
                    "src": "597:126:15",
                    "text": " @dev Returns the average of two signed numbers without overflow.\n The result is rounded towards zero."
                  },
                  "id": 2911,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "average",
                  "nameLocation": "737:7:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2873,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2870,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "752:1:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2911,
                        "src": "745:8:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2869,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "745:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2872,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "762:1:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2911,
                        "src": "755:8:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2871,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "755:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "744:20:15"
                  },
                  "returnParameters": {
                    "id": 2876,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2875,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2911,
                        "src": "788:6:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2874,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "788:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "787:8:15"
                  },
                  "scope": 2933,
                  "src": "728:230:15",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2931,
                    "nodeType": "Block",
                    "src": "1102:158:15",
                    "statements": [
                      {
                        "id": 2930,
                        "nodeType": "UncheckedBlock",
                        "src": "1112:142:15",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 2923,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2921,
                                      "name": "n",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2914,
                                      "src": "1227:1:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">=",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 2922,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1232:1:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1227:6:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "id": 2926,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "1240:2:15",
                                    "subExpression": {
                                      "id": 2925,
                                      "name": "n",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2914,
                                      "src": "1241:1:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "id": 2927,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "1227:15:15",
                                  "trueExpression": {
                                    "id": 2924,
                                    "name": "n",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2914,
                                    "src": "1236:1:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "id": 2920,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1219:7:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 2919,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1219:7:15",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2928,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1219:24:15",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 2918,
                            "id": 2929,
                            "nodeType": "Return",
                            "src": "1212:31:15"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2912,
                    "nodeType": "StructuredDocumentation",
                    "src": "964:78:15",
                    "text": " @dev Returns the absolute unsigned value of a signed value."
                  },
                  "id": 2932,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "abs",
                  "nameLocation": "1056:3:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2915,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2914,
                        "mutability": "mutable",
                        "name": "n",
                        "nameLocation": "1067:1:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2932,
                        "src": "1060:8:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2913,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1060:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1059:10:15"
                  },
                  "returnParameters": {
                    "id": 2918,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2917,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2932,
                        "src": "1093:7:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2916,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1093:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1092:9:15"
                  },
                  "scope": 2933,
                  "src": "1047:213:15",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 2934,
              "src": "215:1047:15",
              "usedErrors": []
            }
          ],
          "src": "109:1154:15"
        },
        "id": 15
      },
      "contracts/NFTPromolider.sol": {
        "ast": {
          "absolutePath": "contracts/NFTPromolider.sol",
          "exportedSymbols": {
            "Address": [
              1601
            ],
            "Context": [
              1623
            ],
            "Counters": [
              1697
            ],
            "ERC165": [
              1950
            ],
            "ERC721": [
              954
            ],
            "ERC721URIStorage": [
              1244
            ],
            "IERC165": [
              1962
            ],
            "IERC4906": [
              24
            ],
            "IERC721": [
              1070
            ],
            "IERC721Metadata": [
              1271
            ],
            "IERC721Receiver": [
              1088
            ],
            "Math": [
              2828
            ],
            "NFTPromolider": [
              4017
            ],
            "SignedMath": [
              2933
            ],
            "Strings": [
              1926
            ]
          },
          "id": 4018,
          "license": "Unlicense",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2935,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "38:23:16"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol",
              "file": "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol",
              "id": 2936,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4018,
              "sourceUnit": 1245,
              "src": "63:78:16",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
              "file": "@openzeppelin/contracts/utils/Counters.sol",
              "id": 2937,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4018,
              "sourceUnit": 1698,
              "src": "142:52:16",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2938,
                    "name": "ERC721URIStorage",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1244,
                    "src": "222:16:16"
                  },
                  "id": 2939,
                  "nodeType": "InheritanceSpecifier",
                  "src": "222:16:16"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 4017,
              "linearizedBaseContracts": [
                4017,
                1244,
                954,
                1271,
                24,
                1070,
                1950,
                1962,
                1623
              ],
              "name": "NFTPromolider",
              "nameLocation": "205:13:16",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 2943,
                  "libraryName": {
                    "id": 2940,
                    "name": "Counters",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1697,
                    "src": "251:8:16"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "245:36:16",
                  "typeName": {
                    "id": 2942,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2941,
                      "name": "Counters.Counter",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1629,
                      "src": "264:16:16"
                    },
                    "referencedDeclaration": 1629,
                    "src": "264:16:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                      "typeString": "struct Counters.Counter"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 2946,
                  "mutability": "mutable",
                  "name": "_tokenIds",
                  "nameLocation": "312:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 4017,
                  "src": "287:34:16",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Counter_$1629_storage",
                    "typeString": "struct Counters.Counter"
                  },
                  "typeName": {
                    "id": 2945,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2944,
                      "name": "Counters.Counter",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1629,
                      "src": "287:16:16"
                    },
                    "referencedDeclaration": 1629,
                    "src": "287:16:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                      "typeString": "struct Counters.Counter"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 2949,
                  "mutability": "mutable",
                  "name": "_itemsSold",
                  "nameLocation": "352:10:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 4017,
                  "src": "327:35:16",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Counter_$1629_storage",
                    "typeString": "struct Counters.Counter"
                  },
                  "typeName": {
                    "id": 2948,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2947,
                      "name": "Counters.Counter",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1629,
                      "src": "327:16:16"
                    },
                    "referencedDeclaration": 1629,
                    "src": "327:16:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Counter_$1629_storage_ptr",
                      "typeString": "struct Counters.Counter"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "functionSelector": "8da5cb5b",
                  "id": 2951,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "392:5:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 4017,
                  "src": "369:28:16",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2950,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "369:15:16",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "6eb588d9",
                  "id": 2954,
                  "mutability": "mutable",
                  "name": "listPrice",
                  "nameLocation": "418:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 4017,
                  "src": "403:36:16",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2952,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "403:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "353530303030303030",
                    "id": 2953,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "430:9:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_550000000_by_1",
                      "typeString": "int_const 550000000"
                    },
                    "value": "550000000"
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "d5abeb01",
                  "id": 2957,
                  "mutability": "mutable",
                  "name": "maxSupply",
                  "nameLocation": "460:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 4017,
                  "src": "445:30:16",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2955,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "445:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "313030",
                    "id": 2956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "472:3:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100_by_1",
                      "typeString": "int_const 100"
                    },
                    "value": "100"
                  },
                  "visibility": "public"
                },
                {
                  "anonymous": false,
                  "id": 2967,
                  "name": "TokenLocked",
                  "nameLocation": "488:11:16",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2966,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2959,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "525:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2967,
                        "src": "509:23:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2958,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "509:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2961,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "558:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2967,
                        "src": "542:21:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2960,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "542:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2963,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "destinationNetwork",
                        "nameLocation": "580:18:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2967,
                        "src": "573:25:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2962,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "573:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2965,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "destinationAddress",
                        "nameLocation": "616:18:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2967,
                        "src": "608:26:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2964,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "608:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "499:141:16"
                  },
                  "src": "482:159:16"
                },
                {
                  "canonicalName": "NFTPromolider.Collection",
                  "id": 2971,
                  "members": [
                    {
                      "id": 2968,
                      "name": "CollectionA",
                      "nameLocation": "676:11:16",
                      "nodeType": "EnumValue",
                      "src": "676:11:16"
                    },
                    {
                      "id": 2969,
                      "name": "CollectionB",
                      "nameLocation": "697:11:16",
                      "nodeType": "EnumValue",
                      "src": "697:11:16"
                    },
                    {
                      "id": 2970,
                      "name": "CollectionC",
                      "nameLocation": "718:11:16",
                      "nodeType": "EnumValue",
                      "src": "718:11:16"
                    }
                  ],
                  "name": "Collection",
                  "nameLocation": "656:10:16",
                  "nodeType": "EnumDefinition",
                  "src": "651:84:16"
                },
                {
                  "canonicalName": "NFTPromolider.ListedToken",
                  "id": 2985,
                  "members": [
                    {
                      "constant": false,
                      "id": 2973,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "nameLocation": "778:7:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 2985,
                      "src": "770:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2972,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "770:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2975,
                      "mutability": "mutable",
                      "name": "owner",
                      "nameLocation": "811:5:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 2985,
                      "src": "795:21:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "typeName": {
                        "id": 2974,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "795:15:16",
                        "stateMutability": "payable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2977,
                      "mutability": "mutable",
                      "name": "seller",
                      "nameLocation": "842:6:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 2985,
                      "src": "826:22:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "typeName": {
                        "id": 2976,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "826:15:16",
                        "stateMutability": "payable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2979,
                      "mutability": "mutable",
                      "name": "price",
                      "nameLocation": "866:5:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 2985,
                      "src": "858:13:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2978,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "858:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2981,
                      "mutability": "mutable",
                      "name": "currentlyListed",
                      "nameLocation": "886:15:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 2985,
                      "src": "881:20:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2980,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "881:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2984,
                      "mutability": "mutable",
                      "name": "collection",
                      "nameLocation": "922:10:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 2985,
                      "src": "911:21:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Collection_$2971",
                        "typeString": "enum NFTPromolider.Collection"
                      },
                      "typeName": {
                        "id": 2983,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 2982,
                          "name": "Collection",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 2971,
                          "src": "911:10:16"
                        },
                        "referencedDeclaration": 2971,
                        "src": "911:10:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Collection_$2971",
                          "typeString": "enum NFTPromolider.Collection"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "ListedToken",
                  "nameLocation": "748:11:16",
                  "nodeType": "StructDefinition",
                  "scope": 4017,
                  "src": "741:200:16",
                  "visibility": "public"
                },
                {
                  "canonicalName": "NFTPromolider.TokenHistory",
                  "id": 2992,
                  "members": [
                    {
                      "constant": false,
                      "id": 2987,
                      "mutability": "mutable",
                      "name": "owner",
                      "nameLocation": "985:5:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 2992,
                      "src": "977:13:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2986,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "977:7:16",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2989,
                      "mutability": "mutable",
                      "name": "price",
                      "nameLocation": "1008:5:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 2992,
                      "src": "1000:13:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2988,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1000:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2991,
                      "mutability": "mutable",
                      "name": "timestamp",
                      "nameLocation": "1031:9:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 2992,
                      "src": "1023:17:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2990,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1023:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "TokenHistory",
                  "nameLocation": "954:12:16",
                  "nodeType": "StructDefinition",
                  "scope": 4017,
                  "src": "947:100:16",
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "id": 2996,
                  "mutability": "mutable",
                  "name": "lockedTokenOwners",
                  "nameLocation": "1093:17:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 4017,
                  "src": "1057:53:16",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                    "typeString": "mapping(uint256 => address)"
                  },
                  "typeName": {
                    "id": 2995,
                    "keyType": {
                      "id": 2993,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1065:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1057:27:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                      "typeString": "mapping(uint256 => address)"
                    },
                    "valueType": {
                      "id": 2994,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1076:7:16",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 3001,
                  "mutability": "mutable",
                  "name": "idToListedToken",
                  "nameLocation": "1156:15:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 4017,
                  "src": "1116:55:16",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                    "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken)"
                  },
                  "typeName": {
                    "id": 3000,
                    "keyType": {
                      "id": 2997,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1124:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1116:31:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                      "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken)"
                    },
                    "valueType": {
                      "id": 2999,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 2998,
                        "name": "ListedToken",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2985,
                        "src": "1135:11:16"
                      },
                      "referencedDeclaration": 2985,
                      "src": "1135:11:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ListedToken_$2985_storage_ptr",
                        "typeString": "struct NFTPromolider.ListedToken"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 3007,
                  "mutability": "mutable",
                  "name": "idToTokenHistory",
                  "nameLocation": "1220:16:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 4017,
                  "src": "1177:59:16",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_$",
                    "typeString": "mapping(uint256 => struct NFTPromolider.TokenHistory[])"
                  },
                  "typeName": {
                    "id": 3006,
                    "keyType": {
                      "id": 3002,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1185:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1177:34:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_$",
                      "typeString": "mapping(uint256 => struct NFTPromolider.TokenHistory[])"
                    },
                    "valueType": {
                      "baseType": {
                        "id": 3004,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 3003,
                          "name": "TokenHistory",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 2992,
                          "src": "1196:12:16"
                        },
                        "referencedDeclaration": 2992,
                        "src": "1196:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenHistory_$2992_storage_ptr",
                          "typeString": "struct NFTPromolider.TokenHistory"
                        }
                      },
                      "id": 3005,
                      "nodeType": "ArrayTypeName",
                      "src": "1196:14:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr",
                        "typeString": "struct NFTPromolider.TokenHistory[]"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "anonymous": false,
                  "id": 3013,
                  "name": "TokenUnlocked",
                  "nameLocation": "1249:13:16",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3012,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3009,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1279:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3013,
                        "src": "1263:23:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3008,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1263:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3011,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1296:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3013,
                        "src": "1288:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3010,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1288:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1262:40:16"
                  },
                  "src": "1243:60:16"
                },
                {
                  "anonymous": false,
                  "id": 3028,
                  "name": "TokenListedSuccess",
                  "nameLocation": "1314:18:16",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3027,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3015,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1358:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3028,
                        "src": "1342:23:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3014,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1342:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3017,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1383:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3028,
                        "src": "1375:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3016,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1375:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3019,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "seller",
                        "nameLocation": "1406:6:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3028,
                        "src": "1398:14:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3018,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1398:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3021,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "price",
                        "nameLocation": "1430:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3028,
                        "src": "1422:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3020,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1422:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3023,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "currentlyListed",
                        "nameLocation": "1450:15:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3028,
                        "src": "1445:20:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3022,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1445:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3026,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "collection",
                        "nameLocation": "1486:10:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3028,
                        "src": "1475:21:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Collection_$2971",
                          "typeString": "enum NFTPromolider.Collection"
                        },
                        "typeName": {
                          "id": 3025,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 3024,
                            "name": "Collection",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2971,
                            "src": "1475:10:16"
                          },
                          "referencedDeclaration": 2971,
                          "src": "1475:10:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Collection_$2971",
                            "typeString": "enum NFTPromolider.Collection"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1332:203:16"
                  },
                  "src": "1308:228:16"
                },
                {
                  "anonymous": false,
                  "id": 3038,
                  "name": "TokenSaleSuccess",
                  "nameLocation": "1548:16:16",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3037,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3030,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1590:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3038,
                        "src": "1574:23:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3029,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1574:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3032,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1615:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3038,
                        "src": "1607:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3031,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1607:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3034,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "seller",
                        "nameLocation": "1638:6:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3038,
                        "src": "1630:14:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3033,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1630:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3036,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "price",
                        "nameLocation": "1662:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3038,
                        "src": "1654:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3035,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1654:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1564:109:16"
                  },
                  "src": "1542:132:16"
                },
                {
                  "body": {
                    "id": 3053,
                    "nodeType": "Block",
                    "src": "1726:44:16",
                    "statements": [
                      {
                        "expression": {
                          "id": 3051,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3045,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2951,
                            "src": "1736:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 3048,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1752:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3049,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1752:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3047,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1744:8:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_payable_$",
                                "typeString": "type(address payable)"
                              },
                              "typeName": {
                                "id": 3046,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1744:8:16",
                                "stateMutability": "payable",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3050,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1744:19:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "1736:27:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 3052,
                        "nodeType": "ExpressionStatement",
                        "src": "1736:27:16"
                      }
                    ]
                  },
                  "id": 3054,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "hexValue": "4e465450726f6d6f6c69646572",
                          "id": 3041,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1701:15:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_2d39ad1e6baf7917a7ba17e78dd030dbc2daf957d843cd3e9b036fc5d49599d3",
                            "typeString": "literal_string \"NFTPromolider\""
                          },
                          "value": "NFTPromolider"
                        },
                        {
                          "hexValue": "4e465450",
                          "id": 3042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1718:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_19ff9a95e83f024866a58149bfe782018671ad66def2b353b2da2e0c104cd0dd",
                            "typeString": "literal_string \"NFTP\""
                          },
                          "value": "NFTP"
                        }
                      ],
                      "id": 3043,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 3040,
                        "name": "ERC721",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 954,
                        "src": "1694:6:16"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1694:31:16"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3039,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1691:2:16"
                  },
                  "returnParameters": {
                    "id": 3044,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1726:0:16"
                  },
                  "scope": 4017,
                  "src": "1680:90:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3071,
                    "nodeType": "Block",
                    "src": "1828:116:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3063,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3060,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2951,
                                "src": "1846:5:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "id": 3061,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1855:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3062,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1855:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1846:19:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4f6e6c79206f776e65722063616e20757064617465206c697374696e67207072696365",
                              "id": 3064,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1867:37:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_648d899d9d80530618a37b92a123c1de3e1d6181a8da46bed2ea09f7dfc0a4d2",
                                "typeString": "literal_string \"Only owner can update listing price\""
                              },
                              "value": "Only owner can update listing price"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_648d899d9d80530618a37b92a123c1de3e1d6181a8da46bed2ea09f7dfc0a4d2",
                                "typeString": "literal_string \"Only owner can update listing price\""
                              }
                            ],
                            "id": 3059,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1838:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1838:67:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3066,
                        "nodeType": "ExpressionStatement",
                        "src": "1838:67:16"
                      },
                      {
                        "expression": {
                          "id": 3069,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3067,
                            "name": "listPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2954,
                            "src": "1915:9:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3068,
                            "name": "_listPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3056,
                            "src": "1927:10:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1915:22:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3070,
                        "nodeType": "ExpressionStatement",
                        "src": "1915:22:16"
                      }
                    ]
                  },
                  "functionSelector": "c322579c",
                  "id": 3072,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateListPrice",
                  "nameLocation": "1785:15:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3057,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3056,
                        "mutability": "mutable",
                        "name": "_listPrice",
                        "nameLocation": "1809:10:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3072,
                        "src": "1801:18:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3055,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1801:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1800:20:16"
                  },
                  "returnParameters": {
                    "id": 3058,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1828:0:16"
                  },
                  "scope": 4017,
                  "src": "1776:168:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3084,
                    "nodeType": "Block",
                    "src": "2037:48:16",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 3080,
                            "name": "idToListedToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3001,
                            "src": "2054:15:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                              "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                            }
                          },
                          "id": 3082,
                          "indexExpression": {
                            "id": 3081,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3074,
                            "src": "2070:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2054:24:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                            "typeString": "struct NFTPromolider.ListedToken storage ref"
                          }
                        },
                        "functionReturnParameters": 3079,
                        "id": 3083,
                        "nodeType": "Return",
                        "src": "2047:31:16"
                      }
                    ]
                  },
                  "functionSelector": "8e264590",
                  "id": 3085,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getListedTokenForId",
                  "nameLocation": "1959:19:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3075,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3074,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1987:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3085,
                        "src": "1979:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3073,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1979:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1978:17:16"
                  },
                  "returnParameters": {
                    "id": 3079,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3078,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3085,
                        "src": "2017:18:16",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ListedToken_$2985_memory_ptr",
                          "typeString": "struct NFTPromolider.ListedToken"
                        },
                        "typeName": {
                          "id": 3077,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 3076,
                            "name": "ListedToken",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2985,
                            "src": "2017:11:16"
                          },
                          "referencedDeclaration": 2985,
                          "src": "2017:11:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ListedToken_$2985_storage_ptr",
                            "typeString": "struct NFTPromolider.ListedToken"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2016:20:16"
                  },
                  "scope": 4017,
                  "src": "1950:135:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3092,
                    "nodeType": "Block",
                    "src": "2145:33:16",
                    "statements": [
                      {
                        "expression": {
                          "id": 3090,
                          "name": "listPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2954,
                          "src": "2162:9:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3089,
                        "id": 3091,
                        "nodeType": "Return",
                        "src": "2155:16:16"
                      }
                    ]
                  },
                  "functionSelector": "68f1945f",
                  "id": 3093,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getListPrice",
                  "nameLocation": "2100:12:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3086,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2112:2:16"
                  },
                  "returnParameters": {
                    "id": 3089,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3088,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3093,
                        "src": "2136:7:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3087,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2136:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2135:9:16"
                  },
                  "scope": 4017,
                  "src": "2091:87:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3165,
                    "nodeType": "Block",
                    "src": "2312:483:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3112,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 3108,
                                    "name": "_tokenIds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2946,
                                    "src": "2330:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Counter_$1629_storage",
                                      "typeString": "struct Counters.Counter storage ref"
                                    }
                                  },
                                  "id": 3109,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "current",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1641,
                                  "src": "2330:17:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$1629_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$1629_storage_ptr_$",
                                    "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                                  }
                                },
                                "id": 3110,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2330:19:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 3111,
                                "name": "maxSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2957,
                                "src": "2352:9:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2330:31:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e6674206d617820737570706c792072656163686564",
                              "id": 3113,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2362:24:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_edc8fea3fbebc856e7a02453f567aef386473087acd09e17fb0f8683f0dbd60a",
                                "typeString": "literal_string \"Nft max supply reached\""
                              },
                              "value": "Nft max supply reached"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_edc8fea3fbebc856e7a02453f567aef386473087acd09e17fb0f8683f0dbd60a",
                                "typeString": "literal_string \"Nft max supply reached\""
                              }
                            ],
                            "id": 3107,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2322:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3114,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2322:65:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3115,
                        "nodeType": "ExpressionStatement",
                        "src": "2322:65:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 3130,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 3125,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_Collection_$2971",
                                    "typeString": "enum NFTPromolider.Collection"
                                  },
                                  "id": 3120,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3117,
                                    "name": "collection",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3100,
                                    "src": "2405:10:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Collection_$2971",
                                      "typeString": "enum NFTPromolider.Collection"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "expression": {
                                      "id": 3118,
                                      "name": "Collection",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2971,
                                      "src": "2419:10:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_Collection_$2971_$",
                                        "typeString": "type(enum NFTPromolider.Collection)"
                                      }
                                    },
                                    "id": 3119,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "CollectionA",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2968,
                                    "src": "2419:22:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Collection_$2971",
                                      "typeString": "enum NFTPromolider.Collection"
                                    }
                                  },
                                  "src": "2405:36:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_Collection_$2971",
                                    "typeString": "enum NFTPromolider.Collection"
                                  },
                                  "id": 3124,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3121,
                                    "name": "collection",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3100,
                                    "src": "2445:10:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Collection_$2971",
                                      "typeString": "enum NFTPromolider.Collection"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "expression": {
                                      "id": 3122,
                                      "name": "Collection",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2971,
                                      "src": "2457:10:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_Collection_$2971_$",
                                        "typeString": "type(enum NFTPromolider.Collection)"
                                      }
                                    },
                                    "id": 3123,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "CollectionB",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2969,
                                    "src": "2457:22:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Collection_$2971",
                                      "typeString": "enum NFTPromolider.Collection"
                                    }
                                  },
                                  "src": "2445:34:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "2405:74:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_enum$_Collection_$2971",
                                  "typeString": "enum NFTPromolider.Collection"
                                },
                                "id": 3129,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3126,
                                  "name": "collection",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3100,
                                  "src": "2482:10:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Collection_$2971",
                                    "typeString": "enum NFTPromolider.Collection"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "expression": {
                                    "id": 3127,
                                    "name": "Collection",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2971,
                                    "src": "2494:10:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Collection_$2971_$",
                                      "typeString": "type(enum NFTPromolider.Collection)"
                                    }
                                  },
                                  "id": 3128,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "CollectionC",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2970,
                                  "src": "2494:22:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Collection_$2971",
                                    "typeString": "enum NFTPromolider.Collection"
                                  }
                                },
                                "src": "2482:34:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2405:111:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4572726f72",
                              "id": 3131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2517:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e342daa49723ff3485f4ff5f755a17b8bc9c3c33bbd312ceee37c94eebfe45c1",
                                "typeString": "literal_string \"Error\""
                              },
                              "value": "Error"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e342daa49723ff3485f4ff5f755a17b8bc9c3c33bbd312ceee37c94eebfe45c1",
                                "typeString": "literal_string \"Error\""
                              }
                            ],
                            "id": 3116,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2397:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2397:128:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3133,
                        "nodeType": "ExpressionStatement",
                        "src": "2397:128:16"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3134,
                              "name": "_tokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2946,
                              "src": "2535:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Counter_$1629_storage",
                                "typeString": "struct Counters.Counter storage ref"
                              }
                            },
                            "id": 3136,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "increment",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1655,
                            "src": "2535:19:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$1629_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$1629_storage_ptr_$",
                              "typeString": "function (struct Counters.Counter storage pointer)"
                            }
                          },
                          "id": 3137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2535:21:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3138,
                        "nodeType": "ExpressionStatement",
                        "src": "2535:21:16"
                      },
                      {
                        "assignments": [
                          3140
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3140,
                            "mutability": "mutable",
                            "name": "newTokenId",
                            "nameLocation": "2574:10:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3165,
                            "src": "2566:18:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3139,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2566:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3144,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3141,
                              "name": "_tokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2946,
                              "src": "2587:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Counter_$1629_storage",
                                "typeString": "struct Counters.Counter storage ref"
                              }
                            },
                            "id": 3142,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "current",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1641,
                            "src": "2587:17:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$1629_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$1629_storage_ptr_$",
                              "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 3143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2587:19:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2566:40:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 3146,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2627:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3147,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "2627:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3148,
                              "name": "newTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3140,
                              "src": "2639:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3145,
                            "name": "_safeMint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              522,
                              551
                            ],
                            "referencedDeclaration": 522,
                            "src": "2617:9:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 3149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2617:33:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3150,
                        "nodeType": "ExpressionStatement",
                        "src": "2617:33:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3152,
                              "name": "newTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3140,
                              "src": "2673:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3153,
                              "name": "tokenURI",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3095,
                              "src": "2685:8:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 3151,
                            "name": "_setTokenURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1213,
                            "src": "2660:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (uint256,string memory)"
                            }
                          },
                          "id": 3154,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2660:34:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3155,
                        "nodeType": "ExpressionStatement",
                        "src": "2660:34:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3157,
                              "name": "newTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3140,
                              "src": "2723:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3158,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3097,
                              "src": "2735:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3159,
                              "name": "collection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3100,
                              "src": "2742:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Collection_$2971",
                                "typeString": "enum NFTPromolider.Collection"
                              }
                            },
                            {
                              "id": 3160,
                              "name": "isList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3102,
                              "src": "2753:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_enum$_Collection_$2971",
                                "typeString": "enum NFTPromolider.Collection"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 3156,
                            "name": "createListedToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3230,
                            "src": "2705:17:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_enum$_Collection_$2971_$_t_bool_$returns$__$",
                              "typeString": "function (uint256,uint256,enum NFTPromolider.Collection,bool)"
                            }
                          },
                          "id": 3161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2705:55:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3162,
                        "nodeType": "ExpressionStatement",
                        "src": "2705:55:16"
                      },
                      {
                        "expression": {
                          "id": 3163,
                          "name": "newTokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3140,
                          "src": "2778:10:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3106,
                        "id": 3164,
                        "nodeType": "Return",
                        "src": "2771:17:16"
                      }
                    ]
                  },
                  "functionSelector": "b1b654dd",
                  "id": 3166,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createToken",
                  "nameLocation": "2193:11:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3103,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3095,
                        "mutability": "mutable",
                        "name": "tokenURI",
                        "nameLocation": "2219:8:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3166,
                        "src": "2205:22:16",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3094,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2205:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3097,
                        "mutability": "mutable",
                        "name": "price",
                        "nameLocation": "2237:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3166,
                        "src": "2229:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3096,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2229:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3100,
                        "mutability": "mutable",
                        "name": "collection",
                        "nameLocation": "2255:10:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3166,
                        "src": "2244:21:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Collection_$2971",
                          "typeString": "enum NFTPromolider.Collection"
                        },
                        "typeName": {
                          "id": 3099,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 3098,
                            "name": "Collection",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2971,
                            "src": "2244:10:16"
                          },
                          "referencedDeclaration": 2971,
                          "src": "2244:10:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Collection_$2971",
                            "typeString": "enum NFTPromolider.Collection"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3102,
                        "mutability": "mutable",
                        "name": "isList",
                        "nameLocation": "2271:6:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3166,
                        "src": "2266:11:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3101,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2266:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2204:74:16"
                  },
                  "returnParameters": {
                    "id": 3106,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3105,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3166,
                        "src": "2303:7:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3104,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2303:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2302:9:16"
                  },
                  "scope": 4017,
                  "src": "2184:611:16",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3229,
                    "nodeType": "Block",
                    "src": "2903:523:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3182,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 3179,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "2921:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3180,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "2921:9:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 3181,
                                "name": "listPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2954,
                                "src": "2934:9:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2921:22:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "496e636f72726563742070726963652073656e74",
                              "id": 3183,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2945:22:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_4c013029acf3765d65c07426aa8030ce4ed3b6cf11b5f537810fc71889656e4e",
                                "typeString": "literal_string \"Incorrect price sent\""
                              },
                              "value": "Incorrect price sent"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_4c013029acf3765d65c07426aa8030ce4ed3b6cf11b5f537810fc71889656e4e",
                                "typeString": "literal_string \"Incorrect price sent\""
                              }
                            ],
                            "id": 3178,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2913:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2913:55:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3185,
                        "nodeType": "ExpressionStatement",
                        "src": "2913:55:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3189,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3187,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3170,
                                "src": "2986:5:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 3188,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2994:1:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2986:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5072696365206d7573742062652067726561746572207468616e207a65726f",
                              "id": 3190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2997:33:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_1e47b80dba3e3bff087af44930a3e1a0b5fb80034194db87f9ae87a93f0935b0",
                                "typeString": "literal_string \"Price must be greater than zero\""
                              },
                              "value": "Price must be greater than zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_1e47b80dba3e3bff087af44930a3e1a0b5fb80034194db87f9ae87a93f0935b0",
                                "typeString": "literal_string \"Price must be greater than zero\""
                              }
                            ],
                            "id": 3186,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2978:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2978:53:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3192,
                        "nodeType": "ExpressionStatement",
                        "src": "2978:53:16"
                      },
                      {
                        "expression": {
                          "id": 3214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3193,
                              "name": "idToListedToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3001,
                              "src": "3042:15:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                              }
                            },
                            "id": 3195,
                            "indexExpression": {
                              "id": 3194,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3168,
                              "src": "3058:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3042:24:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                              "typeString": "struct NFTPromolider.ListedToken storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3197,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3168,
                                "src": "3094:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 3200,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "3123:3:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 3201,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "3123:10:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3199,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3115:8:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_payable_$",
                                    "typeString": "type(address payable)"
                                  },
                                  "typeName": {
                                    "id": 3198,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3115:8:16",
                                    "stateMutability": "payable",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3202,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3115:19:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 3207,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3164:1:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 3206,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "3156:7:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 3205,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3156:7:16",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 3208,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3156:10:16",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3204,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3148:8:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_payable_$",
                                    "typeString": "type(address payable)"
                                  },
                                  "typeName": {
                                    "id": 3203,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3148:8:16",
                                    "stateMutability": "payable",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3209,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3148:19:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "id": 3210,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3170,
                                "src": "3181:5:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3211,
                                "name": "isList",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3175,
                                "src": "3200:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "id": 3212,
                                "name": "collection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3173,
                                "src": "3220:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Collection_$2971",
                                  "typeString": "enum NFTPromolider.Collection"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_enum$_Collection_$2971",
                                  "typeString": "enum NFTPromolider.Collection"
                                }
                              ],
                              "id": 3196,
                              "name": "ListedToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2985,
                              "src": "3069:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_ListedToken_$2985_storage_ptr_$",
                                "typeString": "type(struct NFTPromolider.ListedToken storage pointer)"
                              }
                            },
                            "id": 3213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3069:173:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ListedToken_$2985_memory_ptr",
                              "typeString": "struct NFTPromolider.ListedToken memory"
                            }
                          },
                          "src": "3042:200:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                            "typeString": "struct NFTPromolider.ListedToken storage ref"
                          }
                        },
                        "id": 3215,
                        "nodeType": "ExpressionStatement",
                        "src": "3042:200:16"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3217,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3168,
                              "src": "3290:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 3218,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3311:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3219,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3311:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 3222,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3343:1:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 3221,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3335:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 3220,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3335:7:16",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3223,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3335:10:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3224,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3170,
                              "src": "3359:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3225,
                              "name": "isList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3175,
                              "src": "3378:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 3226,
                              "name": "collection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3173,
                              "src": "3398:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Collection_$2971",
                                "typeString": "enum NFTPromolider.Collection"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_enum$_Collection_$2971",
                                "typeString": "enum NFTPromolider.Collection"
                              }
                            ],
                            "id": 3216,
                            "name": "TokenListedSuccess",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3028,
                            "src": "3258:18:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_enum$_Collection_$2971_$returns$__$",
                              "typeString": "function (uint256,address,address,uint256,bool,enum NFTPromolider.Collection)"
                            }
                          },
                          "id": 3227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3258:161:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3228,
                        "nodeType": "EmitStatement",
                        "src": "3253:166:16"
                      }
                    ]
                  },
                  "id": 3230,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createListedToken",
                  "nameLocation": "2810:17:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3176,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3168,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2836:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3230,
                        "src": "2828:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3167,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2828:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3170,
                        "mutability": "mutable",
                        "name": "price",
                        "nameLocation": "2853:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3230,
                        "src": "2845:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3169,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2845:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3173,
                        "mutability": "mutable",
                        "name": "collection",
                        "nameLocation": "2871:10:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3230,
                        "src": "2860:21:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Collection_$2971",
                          "typeString": "enum NFTPromolider.Collection"
                        },
                        "typeName": {
                          "id": 3172,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 3171,
                            "name": "Collection",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2971,
                            "src": "2860:10:16"
                          },
                          "referencedDeclaration": 2971,
                          "src": "2860:10:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Collection_$2971",
                            "typeString": "enum NFTPromolider.Collection"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3175,
                        "mutability": "mutable",
                        "name": "isList",
                        "nameLocation": "2887:6:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3230,
                        "src": "2882:11:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3174,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2882:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2827:67:16"
                  },
                  "returnParameters": {
                    "id": 3177,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2903:0:16"
                  },
                  "scope": 4017,
                  "src": "2801:625:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3319,
                    "nodeType": "Block",
                    "src": "3497:598:16",
                    "statements": [
                      {
                        "assignments": [
                          3238
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3238,
                            "mutability": "mutable",
                            "name": "nftCount",
                            "nameLocation": "3512:8:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3319,
                            "src": "3507:13:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3237,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "3507:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3242,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3239,
                              "name": "_tokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2946,
                              "src": "3523:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Counter_$1629_storage",
                                "typeString": "struct Counters.Counter storage ref"
                              }
                            },
                            "id": 3240,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "current",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1641,
                            "src": "3523:17:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$1629_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$1629_storage_ptr_$",
                              "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 3241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3523:19:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3507:35:16"
                      },
                      {
                        "assignments": [
                          3244
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3244,
                            "mutability": "mutable",
                            "name": "listedCount",
                            "nameLocation": "3557:11:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3319,
                            "src": "3552:16:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3243,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "3552:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3246,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 3245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3571:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3552:20:16"
                      },
                      {
                        "body": {
                          "id": 3268,
                          "nodeType": "Block",
                          "src": "3620:118:16",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 3262,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 3257,
                                      "name": "idToListedToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3001,
                                      "src": "3638:15:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                        "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                      }
                                    },
                                    "id": 3259,
                                    "indexExpression": {
                                      "id": 3258,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3248,
                                      "src": "3654:1:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3638:18:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                      "typeString": "struct NFTPromolider.ListedToken storage ref"
                                    }
                                  },
                                  "id": 3260,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "currentlyListed",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2981,
                                  "src": "3638:34:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "74727565",
                                  "id": 3261,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3676:4:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "3638:42:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3267,
                              "nodeType": "IfStatement",
                              "src": "3634:94:16",
                              "trueBody": {
                                "id": 3266,
                                "nodeType": "Block",
                                "src": "3682:46:16",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 3264,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "3700:13:16",
                                      "subExpression": {
                                        "id": 3263,
                                        "name": "listedCount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3244,
                                        "src": "3700:11:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 3265,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3700:13:16"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3253,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3251,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3248,
                            "src": "3600:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 3252,
                            "name": "nftCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3238,
                            "src": "3605:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3600:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3269,
                        "initializationExpression": {
                          "assignments": [
                            3248
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3248,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "3593:1:16",
                              "nodeType": "VariableDeclaration",
                              "scope": 3269,
                              "src": "3588:6:16",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3247,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "3588:4:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 3250,
                          "initialValue": {
                            "hexValue": "31",
                            "id": 3249,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3597:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "3588:10:16"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 3255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "3615:3:16",
                            "subExpression": {
                              "id": 3254,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3248,
                              "src": "3615:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3256,
                          "nodeType": "ExpressionStatement",
                          "src": "3615:3:16"
                        },
                        "nodeType": "ForStatement",
                        "src": "3583:155:16"
                      },
                      {
                        "assignments": [
                          3274
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3274,
                            "mutability": "mutable",
                            "name": "tokens",
                            "nameLocation": "3769:6:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3319,
                            "src": "3748:27:16",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct NFTPromolider.ListedToken[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3272,
                                "nodeType": "UserDefinedTypeName",
                                "pathNode": {
                                  "id": 3271,
                                  "name": "ListedToken",
                                  "nodeType": "IdentifierPath",
                                  "referencedDeclaration": 2985,
                                  "src": "3748:11:16"
                                },
                                "referencedDeclaration": 2985,
                                "src": "3748:11:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage_ptr",
                                  "typeString": "struct NFTPromolider.ListedToken"
                                }
                              },
                              "id": 3273,
                              "nodeType": "ArrayTypeName",
                              "src": "3748:13:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_storage_$dyn_storage_ptr",
                                "typeString": "struct NFTPromolider.ListedToken[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3281,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3279,
                              "name": "listedCount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3244,
                              "src": "3796:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3278,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "3778:17:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (struct NFTPromolider.ListedToken memory[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3276,
                                "nodeType": "UserDefinedTypeName",
                                "pathNode": {
                                  "id": 3275,
                                  "name": "ListedToken",
                                  "nodeType": "IdentifierPath",
                                  "referencedDeclaration": 2985,
                                  "src": "3782:11:16"
                                },
                                "referencedDeclaration": 2985,
                                "src": "3782:11:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage_ptr",
                                  "typeString": "struct NFTPromolider.ListedToken"
                                }
                              },
                              "id": 3277,
                              "nodeType": "ArrayTypeName",
                              "src": "3782:13:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_storage_$dyn_storage_ptr",
                                "typeString": "struct NFTPromolider.ListedToken[]"
                              }
                            }
                          },
                          "id": 3280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3778:30:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct NFTPromolider.ListedToken memory[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3748:60:16"
                      },
                      {
                        "assignments": [
                          3283
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3283,
                            "mutability": "mutable",
                            "name": "currentIndex",
                            "nameLocation": "3823:12:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3319,
                            "src": "3818:17:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3282,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "3818:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3285,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 3284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3838:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3818:21:16"
                      },
                      {
                        "body": {
                          "id": 3315,
                          "nodeType": "Block",
                          "src": "3887:178:16",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 3301,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 3296,
                                      "name": "idToListedToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3001,
                                      "src": "3905:15:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                        "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                      }
                                    },
                                    "id": 3298,
                                    "indexExpression": {
                                      "id": 3297,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3287,
                                      "src": "3921:1:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3905:18:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                      "typeString": "struct NFTPromolider.ListedToken storage ref"
                                    }
                                  },
                                  "id": 3299,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "currentlyListed",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2981,
                                  "src": "3905:34:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "74727565",
                                  "id": 3300,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3943:4:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "3905:42:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3314,
                              "nodeType": "IfStatement",
                              "src": "3901:154:16",
                              "trueBody": {
                                "id": 3313,
                                "nodeType": "Block",
                                "src": "3949:106:16",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 3308,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 3302,
                                          "name": "tokens",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3274,
                                          "src": "3967:6:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                                            "typeString": "struct NFTPromolider.ListedToken memory[] memory"
                                          }
                                        },
                                        "id": 3304,
                                        "indexExpression": {
                                          "id": 3303,
                                          "name": "currentIndex",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3283,
                                          "src": "3974:12:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "3967:20:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ListedToken_$2985_memory_ptr",
                                          "typeString": "struct NFTPromolider.ListedToken memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "baseExpression": {
                                          "id": 3305,
                                          "name": "idToListedToken",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3001,
                                          "src": "3990:15:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                            "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                          }
                                        },
                                        "id": 3307,
                                        "indexExpression": {
                                          "id": 3306,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3287,
                                          "src": "4006:1:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3990:18:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                          "typeString": "struct NFTPromolider.ListedToken storage ref"
                                        }
                                      },
                                      "src": "3967:41:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ListedToken_$2985_memory_ptr",
                                        "typeString": "struct NFTPromolider.ListedToken memory"
                                      }
                                    },
                                    "id": 3309,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3967:41:16"
                                  },
                                  {
                                    "expression": {
                                      "id": 3311,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "4026:14:16",
                                      "subExpression": {
                                        "id": 3310,
                                        "name": "currentIndex",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3283,
                                        "src": "4026:12:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 3312,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4026:14:16"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3290,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3287,
                            "src": "3867:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 3291,
                            "name": "nftCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3238,
                            "src": "3872:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3867:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3316,
                        "initializationExpression": {
                          "assignments": [
                            3287
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3287,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "3860:1:16",
                              "nodeType": "VariableDeclaration",
                              "scope": 3316,
                              "src": "3855:6:16",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3286,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "3855:4:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 3289,
                          "initialValue": {
                            "hexValue": "31",
                            "id": 3288,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3864:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "3855:10:16"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 3294,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "3882:3:16",
                            "subExpression": {
                              "id": 3293,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3287,
                              "src": "3882:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3295,
                          "nodeType": "ExpressionStatement",
                          "src": "3882:3:16"
                        },
                        "nodeType": "ForStatement",
                        "src": "3850:215:16"
                      },
                      {
                        "expression": {
                          "id": 3317,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3274,
                          "src": "4082:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct NFTPromolider.ListedToken memory[] memory"
                          }
                        },
                        "functionReturnParameters": 3236,
                        "id": 3318,
                        "nodeType": "Return",
                        "src": "4075:13:16"
                      }
                    ]
                  },
                  "functionSelector": "e0391b09",
                  "id": 3320,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAllNFTs",
                  "nameLocation": "3441:10:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3231,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3451:2:16"
                  },
                  "returnParameters": {
                    "id": 3236,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3235,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3320,
                        "src": "3475:20:16",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct NFTPromolider.ListedToken[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3233,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 3232,
                              "name": "ListedToken",
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 2985,
                              "src": "3475:11:16"
                            },
                            "referencedDeclaration": 2985,
                            "src": "3475:11:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ListedToken_$2985_storage_ptr",
                              "typeString": "struct NFTPromolider.ListedToken"
                            }
                          },
                          "id": 3234,
                          "nodeType": "ArrayTypeName",
                          "src": "3475:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_storage_$dyn_storage_ptr",
                            "typeString": "struct NFTPromolider.ListedToken[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3474:22:16"
                  },
                  "scope": 4017,
                  "src": "3432:663:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3411,
                    "nodeType": "Block",
                    "src": "4165:603:16",
                    "statements": [
                      {
                        "assignments": [
                          3328
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3328,
                            "mutability": "mutable",
                            "name": "totalItemCount",
                            "nameLocation": "4180:14:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3411,
                            "src": "4175:19:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3327,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "4175:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3332,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3329,
                              "name": "_tokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2946,
                              "src": "4197:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Counter_$1629_storage",
                                "typeString": "struct Counters.Counter storage ref"
                              }
                            },
                            "id": 3330,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "current",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1641,
                            "src": "4197:17:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$1629_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$1629_storage_ptr_$",
                              "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 3331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4197:19:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4175:41:16"
                      },
                      {
                        "assignments": [
                          3334
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3334,
                            "mutability": "mutable",
                            "name": "itemCount",
                            "nameLocation": "4231:9:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3411,
                            "src": "4226:14:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3333,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "4226:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3336,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 3335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4243:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4226:18:16"
                      },
                      {
                        "body": {
                          "id": 3359,
                          "nodeType": "Block",
                          "src": "4298:112:16",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 3353,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 3347,
                                      "name": "idToListedToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3001,
                                      "src": "4316:15:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                        "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                      }
                                    },
                                    "id": 3349,
                                    "indexExpression": {
                                      "id": 3348,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3338,
                                      "src": "4332:1:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4316:18:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                      "typeString": "struct NFTPromolider.ListedToken storage ref"
                                    }
                                  },
                                  "id": 3350,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2975,
                                  "src": "4316:24:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "expression": {
                                    "id": 3351,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "4344:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 3352,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "4344:10:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "4316:38:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3358,
                              "nodeType": "IfStatement",
                              "src": "4312:88:16",
                              "trueBody": {
                                "id": 3357,
                                "nodeType": "Block",
                                "src": "4356:44:16",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 3355,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "4374:11:16",
                                      "subExpression": {
                                        "id": 3354,
                                        "name": "itemCount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3334,
                                        "src": "4374:9:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 3356,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4374:11:16"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3341,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3338,
                            "src": "4272:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 3342,
                            "name": "totalItemCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3328,
                            "src": "4277:14:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4272:19:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3360,
                        "initializationExpression": {
                          "assignments": [
                            3338
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3338,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "4265:1:16",
                              "nodeType": "VariableDeclaration",
                              "scope": 3360,
                              "src": "4260:6:16",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3337,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "4260:4:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 3340,
                          "initialValue": {
                            "hexValue": "31",
                            "id": 3339,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4269:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "4260:10:16"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 3345,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "4293:3:16",
                            "subExpression": {
                              "id": 3344,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3338,
                              "src": "4293:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3346,
                          "nodeType": "ExpressionStatement",
                          "src": "4293:3:16"
                        },
                        "nodeType": "ForStatement",
                        "src": "4255:155:16"
                      },
                      {
                        "assignments": [
                          3365
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3365,
                            "mutability": "mutable",
                            "name": "items",
                            "nameLocation": "4441:5:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3411,
                            "src": "4420:26:16",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct NFTPromolider.ListedToken[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3363,
                                "nodeType": "UserDefinedTypeName",
                                "pathNode": {
                                  "id": 3362,
                                  "name": "ListedToken",
                                  "nodeType": "IdentifierPath",
                                  "referencedDeclaration": 2985,
                                  "src": "4420:11:16"
                                },
                                "referencedDeclaration": 2985,
                                "src": "4420:11:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage_ptr",
                                  "typeString": "struct NFTPromolider.ListedToken"
                                }
                              },
                              "id": 3364,
                              "nodeType": "ArrayTypeName",
                              "src": "4420:13:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_storage_$dyn_storage_ptr",
                                "typeString": "struct NFTPromolider.ListedToken[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3372,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3370,
                              "name": "itemCount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3334,
                              "src": "4467:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3369,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "4449:17:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (struct NFTPromolider.ListedToken memory[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3367,
                                "nodeType": "UserDefinedTypeName",
                                "pathNode": {
                                  "id": 3366,
                                  "name": "ListedToken",
                                  "nodeType": "IdentifierPath",
                                  "referencedDeclaration": 2985,
                                  "src": "4453:11:16"
                                },
                                "referencedDeclaration": 2985,
                                "src": "4453:11:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage_ptr",
                                  "typeString": "struct NFTPromolider.ListedToken"
                                }
                              },
                              "id": 3368,
                              "nodeType": "ArrayTypeName",
                              "src": "4453:13:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_storage_$dyn_storage_ptr",
                                "typeString": "struct NFTPromolider.ListedToken[]"
                              }
                            }
                          },
                          "id": 3371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4449:28:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct NFTPromolider.ListedToken memory[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4420:57:16"
                      },
                      {
                        "assignments": [
                          3374
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3374,
                            "mutability": "mutable",
                            "name": "currentIndex",
                            "nameLocation": "4492:12:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3411,
                            "src": "4487:17:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3373,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "4487:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3376,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 3375,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4507:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4487:21:16"
                      },
                      {
                        "body": {
                          "id": 3407,
                          "nodeType": "Block",
                          "src": "4566:173:16",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 3393,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 3387,
                                      "name": "idToListedToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3001,
                                      "src": "4584:15:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                        "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                      }
                                    },
                                    "id": 3389,
                                    "indexExpression": {
                                      "id": 3388,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3378,
                                      "src": "4600:1:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4584:18:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                      "typeString": "struct NFTPromolider.ListedToken storage ref"
                                    }
                                  },
                                  "id": 3390,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2975,
                                  "src": "4584:24:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "expression": {
                                    "id": 3391,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "4612:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 3392,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "4612:10:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "4584:38:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3406,
                              "nodeType": "IfStatement",
                              "src": "4580:149:16",
                              "trueBody": {
                                "id": 3405,
                                "nodeType": "Block",
                                "src": "4624:105:16",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 3400,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 3394,
                                          "name": "items",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3365,
                                          "src": "4642:5:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                                            "typeString": "struct NFTPromolider.ListedToken memory[] memory"
                                          }
                                        },
                                        "id": 3396,
                                        "indexExpression": {
                                          "id": 3395,
                                          "name": "currentIndex",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3374,
                                          "src": "4648:12:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "4642:19:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ListedToken_$2985_memory_ptr",
                                          "typeString": "struct NFTPromolider.ListedToken memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "baseExpression": {
                                          "id": 3397,
                                          "name": "idToListedToken",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3001,
                                          "src": "4664:15:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                            "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                          }
                                        },
                                        "id": 3399,
                                        "indexExpression": {
                                          "id": 3398,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3378,
                                          "src": "4680:1:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4664:18:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                          "typeString": "struct NFTPromolider.ListedToken storage ref"
                                        }
                                      },
                                      "src": "4642:40:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ListedToken_$2985_memory_ptr",
                                        "typeString": "struct NFTPromolider.ListedToken memory"
                                      }
                                    },
                                    "id": 3401,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4642:40:16"
                                  },
                                  {
                                    "expression": {
                                      "id": 3403,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "4700:14:16",
                                      "subExpression": {
                                        "id": 3402,
                                        "name": "currentIndex",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3374,
                                        "src": "4700:12:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 3404,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4700:14:16"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3381,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3378,
                            "src": "4540:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 3382,
                            "name": "totalItemCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3328,
                            "src": "4545:14:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4540:19:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3408,
                        "initializationExpression": {
                          "assignments": [
                            3378
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3378,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "4533:1:16",
                              "nodeType": "VariableDeclaration",
                              "scope": 3408,
                              "src": "4528:6:16",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3377,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "4528:4:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 3380,
                          "initialValue": {
                            "hexValue": "31",
                            "id": 3379,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4537:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "4528:10:16"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 3385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "4561:3:16",
                            "subExpression": {
                              "id": 3384,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3378,
                              "src": "4561:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3386,
                          "nodeType": "ExpressionStatement",
                          "src": "4561:3:16"
                        },
                        "nodeType": "ForStatement",
                        "src": "4523:216:16"
                      },
                      {
                        "expression": {
                          "id": 3409,
                          "name": "items",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3365,
                          "src": "4756:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct NFTPromolider.ListedToken memory[] memory"
                          }
                        },
                        "functionReturnParameters": 3326,
                        "id": 3410,
                        "nodeType": "Return",
                        "src": "4749:12:16"
                      }
                    ]
                  },
                  "functionSelector": "629cb2e4",
                  "id": 3412,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getMyNFTs",
                  "nameLocation": "4110:9:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3321,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4119:2:16"
                  },
                  "returnParameters": {
                    "id": 3326,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3325,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3412,
                        "src": "4143:20:16",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct NFTPromolider.ListedToken[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3323,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 3322,
                              "name": "ListedToken",
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 2985,
                              "src": "4143:11:16"
                            },
                            "referencedDeclaration": 2985,
                            "src": "4143:11:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ListedToken_$2985_storage_ptr",
                              "typeString": "struct NFTPromolider.ListedToken"
                            }
                          },
                          "id": 3324,
                          "nodeType": "ArrayTypeName",
                          "src": "4143:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_storage_$dyn_storage_ptr",
                            "typeString": "struct NFTPromolider.ListedToken[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4142:22:16"
                  },
                  "scope": 4017,
                  "src": "4101:667:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3518,
                    "nodeType": "Block",
                    "src": "4869:692:16",
                    "statements": [
                      {
                        "assignments": [
                          3423
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3423,
                            "mutability": "mutable",
                            "name": "nftCount",
                            "nameLocation": "4884:8:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3518,
                            "src": "4879:13:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3422,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "4879:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3427,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3424,
                              "name": "_tokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2946,
                              "src": "4895:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Counter_$1629_storage",
                                "typeString": "struct Counters.Counter storage ref"
                              }
                            },
                            "id": 3425,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "current",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1641,
                            "src": "4895:17:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$1629_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$1629_storage_ptr_$",
                              "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 3426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4895:19:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4879:35:16"
                      },
                      {
                        "assignments": [
                          3429
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3429,
                            "mutability": "mutable",
                            "name": "listedCount",
                            "nameLocation": "4929:11:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3518,
                            "src": "4924:16:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3428,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "4924:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3431,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 3430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4943:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4924:20:16"
                      },
                      {
                        "body": {
                          "id": 3460,
                          "nodeType": "Block",
                          "src": "4992:165:16",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 3454,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_Collection_$2971",
                                    "typeString": "enum NFTPromolider.Collection"
                                  },
                                  "id": 3447,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 3442,
                                        "name": "idToListedToken",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3001,
                                        "src": "5010:15:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                          "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                        }
                                      },
                                      "id": 3444,
                                      "indexExpression": {
                                        "id": 3443,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3433,
                                        "src": "5026:1:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "5010:18:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                        "typeString": "struct NFTPromolider.ListedToken storage ref"
                                      }
                                    },
                                    "id": 3445,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "collection",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2984,
                                    "src": "5010:29:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Collection_$2971",
                                      "typeString": "enum NFTPromolider.Collection"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "id": 3446,
                                    "name": "collection",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3415,
                                    "src": "5043:10:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Collection_$2971",
                                      "typeString": "enum NFTPromolider.Collection"
                                    }
                                  },
                                  "src": "5010:43:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 3453,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 3448,
                                        "name": "idToListedToken",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3001,
                                        "src": "5057:15:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                          "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                        }
                                      },
                                      "id": 3450,
                                      "indexExpression": {
                                        "id": 3449,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3433,
                                        "src": "5073:1:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "5057:18:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                        "typeString": "struct NFTPromolider.ListedToken storage ref"
                                      }
                                    },
                                    "id": 3451,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "currentlyListed",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2981,
                                    "src": "5057:34:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "hexValue": "74727565",
                                    "id": 3452,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5095:4:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  "src": "5057:42:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "5010:89:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3459,
                              "nodeType": "IfStatement",
                              "src": "5006:141:16",
                              "trueBody": {
                                "id": 3458,
                                "nodeType": "Block",
                                "src": "5101:46:16",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 3456,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "5119:13:16",
                                      "subExpression": {
                                        "id": 3455,
                                        "name": "listedCount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3429,
                                        "src": "5119:11:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 3457,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5119:13:16"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3436,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3433,
                            "src": "4972:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 3437,
                            "name": "nftCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3423,
                            "src": "4977:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4972:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3461,
                        "initializationExpression": {
                          "assignments": [
                            3433
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3433,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "4965:1:16",
                              "nodeType": "VariableDeclaration",
                              "scope": 3461,
                              "src": "4960:6:16",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3432,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "4960:4:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 3435,
                          "initialValue": {
                            "hexValue": "31",
                            "id": 3434,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4969:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "4960:10:16"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 3440,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "4987:3:16",
                            "subExpression": {
                              "id": 3439,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3433,
                              "src": "4987:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3441,
                          "nodeType": "ExpressionStatement",
                          "src": "4987:3:16"
                        },
                        "nodeType": "ForStatement",
                        "src": "4955:202:16"
                      },
                      {
                        "assignments": [
                          3466
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3466,
                            "mutability": "mutable",
                            "name": "tokens",
                            "nameLocation": "5188:6:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3518,
                            "src": "5167:27:16",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct NFTPromolider.ListedToken[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3464,
                                "nodeType": "UserDefinedTypeName",
                                "pathNode": {
                                  "id": 3463,
                                  "name": "ListedToken",
                                  "nodeType": "IdentifierPath",
                                  "referencedDeclaration": 2985,
                                  "src": "5167:11:16"
                                },
                                "referencedDeclaration": 2985,
                                "src": "5167:11:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage_ptr",
                                  "typeString": "struct NFTPromolider.ListedToken"
                                }
                              },
                              "id": 3465,
                              "nodeType": "ArrayTypeName",
                              "src": "5167:13:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_storage_$dyn_storage_ptr",
                                "typeString": "struct NFTPromolider.ListedToken[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3473,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3471,
                              "name": "listedCount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3429,
                              "src": "5215:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3470,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "5197:17:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (struct NFTPromolider.ListedToken memory[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3468,
                                "nodeType": "UserDefinedTypeName",
                                "pathNode": {
                                  "id": 3467,
                                  "name": "ListedToken",
                                  "nodeType": "IdentifierPath",
                                  "referencedDeclaration": 2985,
                                  "src": "5201:11:16"
                                },
                                "referencedDeclaration": 2985,
                                "src": "5201:11:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage_ptr",
                                  "typeString": "struct NFTPromolider.ListedToken"
                                }
                              },
                              "id": 3469,
                              "nodeType": "ArrayTypeName",
                              "src": "5201:13:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_storage_$dyn_storage_ptr",
                                "typeString": "struct NFTPromolider.ListedToken[]"
                              }
                            }
                          },
                          "id": 3472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5197:30:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct NFTPromolider.ListedToken memory[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5167:60:16"
                      },
                      {
                        "assignments": [
                          3475
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3475,
                            "mutability": "mutable",
                            "name": "currentIndex",
                            "nameLocation": "5242:12:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3518,
                            "src": "5237:17:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3474,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "5237:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3477,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 3476,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5257:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5237:21:16"
                      },
                      {
                        "body": {
                          "id": 3514,
                          "nodeType": "Block",
                          "src": "5306:225:16",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 3500,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_Collection_$2971",
                                    "typeString": "enum NFTPromolider.Collection"
                                  },
                                  "id": 3493,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 3488,
                                        "name": "idToListedToken",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3001,
                                        "src": "5324:15:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                          "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                        }
                                      },
                                      "id": 3490,
                                      "indexExpression": {
                                        "id": 3489,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3479,
                                        "src": "5340:1:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "5324:18:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                        "typeString": "struct NFTPromolider.ListedToken storage ref"
                                      }
                                    },
                                    "id": 3491,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "collection",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2984,
                                    "src": "5324:29:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Collection_$2971",
                                      "typeString": "enum NFTPromolider.Collection"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "id": 3492,
                                    "name": "collection",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3415,
                                    "src": "5357:10:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Collection_$2971",
                                      "typeString": "enum NFTPromolider.Collection"
                                    }
                                  },
                                  "src": "5324:43:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 3499,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 3494,
                                        "name": "idToListedToken",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3001,
                                        "src": "5371:15:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                          "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                        }
                                      },
                                      "id": 3496,
                                      "indexExpression": {
                                        "id": 3495,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3479,
                                        "src": "5387:1:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "5371:18:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                        "typeString": "struct NFTPromolider.ListedToken storage ref"
                                      }
                                    },
                                    "id": 3497,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "currentlyListed",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2981,
                                    "src": "5371:34:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "hexValue": "74727565",
                                    "id": 3498,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5409:4:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  "src": "5371:42:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "5324:89:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3513,
                              "nodeType": "IfStatement",
                              "src": "5320:201:16",
                              "trueBody": {
                                "id": 3512,
                                "nodeType": "Block",
                                "src": "5415:106:16",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 3507,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 3501,
                                          "name": "tokens",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3466,
                                          "src": "5433:6:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                                            "typeString": "struct NFTPromolider.ListedToken memory[] memory"
                                          }
                                        },
                                        "id": 3503,
                                        "indexExpression": {
                                          "id": 3502,
                                          "name": "currentIndex",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3475,
                                          "src": "5440:12:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "5433:20:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ListedToken_$2985_memory_ptr",
                                          "typeString": "struct NFTPromolider.ListedToken memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "baseExpression": {
                                          "id": 3504,
                                          "name": "idToListedToken",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3001,
                                          "src": "5456:15:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                            "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                          }
                                        },
                                        "id": 3506,
                                        "indexExpression": {
                                          "id": 3505,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3479,
                                          "src": "5472:1:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "5456:18:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                          "typeString": "struct NFTPromolider.ListedToken storage ref"
                                        }
                                      },
                                      "src": "5433:41:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ListedToken_$2985_memory_ptr",
                                        "typeString": "struct NFTPromolider.ListedToken memory"
                                      }
                                    },
                                    "id": 3508,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5433:41:16"
                                  },
                                  {
                                    "expression": {
                                      "id": 3510,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "5492:14:16",
                                      "subExpression": {
                                        "id": 3509,
                                        "name": "currentIndex",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3475,
                                        "src": "5492:12:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 3511,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5492:14:16"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3482,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3479,
                            "src": "5286:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 3483,
                            "name": "nftCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3423,
                            "src": "5291:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5286:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3515,
                        "initializationExpression": {
                          "assignments": [
                            3479
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3479,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "5279:1:16",
                              "nodeType": "VariableDeclaration",
                              "scope": 3515,
                              "src": "5274:6:16",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3478,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "5274:4:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 3481,
                          "initialValue": {
                            "hexValue": "31",
                            "id": 3480,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5283:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "5274:10:16"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 3486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "5301:3:16",
                            "subExpression": {
                              "id": 3485,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3479,
                              "src": "5301:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3487,
                          "nodeType": "ExpressionStatement",
                          "src": "5301:3:16"
                        },
                        "nodeType": "ForStatement",
                        "src": "5269:262:16"
                      },
                      {
                        "expression": {
                          "id": 3516,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3466,
                          "src": "5548:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct NFTPromolider.ListedToken memory[] memory"
                          }
                        },
                        "functionReturnParameters": 3421,
                        "id": 3517,
                        "nodeType": "Return",
                        "src": "5541:13:16"
                      }
                    ]
                  },
                  "functionSelector": "e22124bc",
                  "id": 3519,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getNFTsByCollection",
                  "nameLocation": "4783:19:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3416,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3415,
                        "mutability": "mutable",
                        "name": "collection",
                        "nameLocation": "4814:10:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3519,
                        "src": "4803:21:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Collection_$2971",
                          "typeString": "enum NFTPromolider.Collection"
                        },
                        "typeName": {
                          "id": 3414,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 3413,
                            "name": "Collection",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2971,
                            "src": "4803:10:16"
                          },
                          "referencedDeclaration": 2971,
                          "src": "4803:10:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Collection_$2971",
                            "typeString": "enum NFTPromolider.Collection"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4802:23:16"
                  },
                  "returnParameters": {
                    "id": 3421,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3420,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3519,
                        "src": "4847:20:16",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct NFTPromolider.ListedToken[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3418,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 3417,
                              "name": "ListedToken",
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 2985,
                              "src": "4847:11:16"
                            },
                            "referencedDeclaration": 2985,
                            "src": "4847:11:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ListedToken_$2985_storage_ptr",
                              "typeString": "struct NFTPromolider.ListedToken"
                            }
                          },
                          "id": 3419,
                          "nodeType": "ArrayTypeName",
                          "src": "4847:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_ListedToken_$2985_storage_$dyn_storage_ptr",
                            "typeString": "struct NFTPromolider.ListedToken[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4846:22:16"
                  },
                  "scope": 4017,
                  "src": "4774:787:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3532,
                    "nodeType": "Block",
                    "src": "5653:49:16",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 3528,
                            "name": "idToTokenHistory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3007,
                            "src": "5670:16:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_$",
                              "typeString": "mapping(uint256 => struct NFTPromolider.TokenHistory storage ref[] storage ref)"
                            }
                          },
                          "id": 3530,
                          "indexExpression": {
                            "id": 3529,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3521,
                            "src": "5687:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5670:25:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage",
                            "typeString": "struct NFTPromolider.TokenHistory storage ref[] storage ref"
                          }
                        },
                        "functionReturnParameters": 3527,
                        "id": 3531,
                        "nodeType": "Return",
                        "src": "5663:32:16"
                      }
                    ]
                  },
                  "functionSelector": "2142ae2c",
                  "id": 3533,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTokenHistory",
                  "nameLocation": "5576:15:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3522,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3521,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "5600:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3533,
                        "src": "5592:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3520,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5592:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5591:17:16"
                  },
                  "returnParameters": {
                    "id": 3527,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3526,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3533,
                        "src": "5630:21:16",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct NFTPromolider.TokenHistory[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3524,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 3523,
                              "name": "TokenHistory",
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 2992,
                              "src": "5630:12:16"
                            },
                            "referencedDeclaration": 2992,
                            "src": "5630:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenHistory_$2992_storage_ptr",
                              "typeString": "struct NFTPromolider.TokenHistory"
                            }
                          },
                          "id": 3525,
                          "nodeType": "ArrayTypeName",
                          "src": "5630:14:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr",
                            "typeString": "struct NFTPromolider.TokenHistory[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5629:23:16"
                  },
                  "scope": 4017,
                  "src": "5567:135:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3648,
                    "nodeType": "Block",
                    "src": "5761:905:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 3539,
                                  "name": "idToListedToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3001,
                                  "src": "5779:15:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                    "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                  }
                                },
                                "id": 3541,
                                "indexExpression": {
                                  "id": 3540,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3535,
                                  "src": "5795:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5779:24:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                  "typeString": "struct NFTPromolider.ListedToken storage ref"
                                }
                              },
                              "id": 3542,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "currentlyListed",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2981,
                              "src": "5779:40:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "546f6b656e206e6f742063757272656e746c79206c6973746564",
                              "id": 3543,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5821:28:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c4a3cb03a777966952a9e0ea8169bdf906c35d5703ed25d4d34802e2702cbca2",
                                "typeString": "literal_string \"Token not currently listed\""
                              },
                              "value": "Token not currently listed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c4a3cb03a777966952a9e0ea8169bdf906c35d5703ed25d4d34802e2702cbca2",
                                "typeString": "literal_string \"Token not currently listed\""
                              }
                            ],
                            "id": 3538,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5771:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5771:79:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3545,
                        "nodeType": "ExpressionStatement",
                        "src": "5771:79:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3553,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 3547,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "5868:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3548,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "5868:9:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 3549,
                                    "name": "idToListedToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3001,
                                    "src": "5881:15:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                      "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                    }
                                  },
                                  "id": 3551,
                                  "indexExpression": {
                                    "id": 3550,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3535,
                                    "src": "5897:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5881:24:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                    "typeString": "struct NFTPromolider.ListedToken storage ref"
                                  }
                                },
                                "id": 3552,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "price",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2979,
                                "src": "5881:30:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5868:43:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "496e73756666696369656e742066756e64732073656e74",
                              "id": 3554,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5913:25:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ef04984094766165d0f3292abebb7fe2c98e15506095c629b0da789b5dea64bb",
                                "typeString": "literal_string \"Insufficient funds sent\""
                              },
                              "value": "Insufficient funds sent"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ef04984094766165d0f3292abebb7fe2c98e15506095c629b0da789b5dea64bb",
                                "typeString": "literal_string \"Insufficient funds sent\""
                              }
                            ],
                            "id": 3546,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5860:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5860:79:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3556,
                        "nodeType": "ExpressionStatement",
                        "src": "5860:79:16"
                      },
                      {
                        "assignments": [
                          3558
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3558,
                            "mutability": "mutable",
                            "name": "seller",
                            "nameLocation": "5966:6:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3648,
                            "src": "5950:22:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            "typeName": {
                              "id": 3557,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5950:15:16",
                              "stateMutability": "payable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3563,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 3559,
                              "name": "idToListedToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3001,
                              "src": "5975:15:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                              }
                            },
                            "id": 3561,
                            "indexExpression": {
                              "id": 3560,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3535,
                              "src": "5991:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5975:24:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                              "typeString": "struct NFTPromolider.ListedToken storage ref"
                            }
                          },
                          "id": 3562,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2975,
                          "src": "5975:30:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5950:55:16"
                      },
                      {
                        "assignments": [
                          3565
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3565,
                            "mutability": "mutable",
                            "name": "price",
                            "nameLocation": "6023:5:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3648,
                            "src": "6015:13:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3564,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6015:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3570,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 3566,
                              "name": "idToListedToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3001,
                              "src": "6031:15:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                              }
                            },
                            "id": 3568,
                            "indexExpression": {
                              "id": 3567,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3535,
                              "src": "6047:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6031:24:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                              "typeString": "struct NFTPromolider.ListedToken storage ref"
                            }
                          },
                          "id": 3569,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "price",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2979,
                          "src": "6031:30:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6015:46:16"
                      },
                      {
                        "assignments": [
                          3572
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3572,
                            "mutability": "mutable",
                            "name": "commission",
                            "nameLocation": "6079:10:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3648,
                            "src": "6071:18:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3571,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6071:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3578,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3577,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3575,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3573,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3565,
                              "src": "6092:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "hexValue": "35",
                              "id": 3574,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6100:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_5_by_1",
                                "typeString": "int_const 5"
                              },
                              "value": "5"
                            },
                            "src": "6092:9:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "hexValue": "313030",
                            "id": 3576,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6104:3:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_100_by_1",
                              "typeString": "int_const 100"
                            },
                            "value": "100"
                          },
                          "src": "6092:15:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6071:36:16"
                      },
                      {
                        "assignments": [
                          3580
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3580,
                            "mutability": "mutable",
                            "name": "sellerAmount",
                            "nameLocation": "6125:12:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3648,
                            "src": "6117:20:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3579,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6117:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3584,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3581,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3565,
                            "src": "6140:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 3582,
                            "name": "commission",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3572,
                            "src": "6148:10:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6140:18:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6117:41:16"
                      },
                      {
                        "expression": {
                          "id": 3590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3585,
                                "name": "idToListedToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3001,
                                "src": "6169:15:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                  "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                }
                              },
                              "id": 3587,
                              "indexExpression": {
                                "id": 3586,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3535,
                                "src": "6185:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6169:24:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                "typeString": "struct NFTPromolider.ListedToken storage ref"
                              }
                            },
                            "id": 3588,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "currentlyListed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2981,
                            "src": "6169:40:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 3589,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6212:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "6169:48:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3591,
                        "nodeType": "ExpressionStatement",
                        "src": "6169:48:16"
                      },
                      {
                        "expression": {
                          "id": 3597,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3592,
                                "name": "idToListedToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3001,
                                "src": "6227:15:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                  "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                }
                              },
                              "id": 3594,
                              "indexExpression": {
                                "id": 3593,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3535,
                                "src": "6243:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6227:24:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                "typeString": "struct NFTPromolider.ListedToken storage ref"
                              }
                            },
                            "id": 3595,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "seller",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2977,
                            "src": "6227:31:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3596,
                            "name": "seller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3558,
                            "src": "6261:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "6227:40:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 3598,
                        "nodeType": "ExpressionStatement",
                        "src": "6227:40:16"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3599,
                              "name": "_itemsSold",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2949,
                              "src": "6277:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Counter_$1629_storage",
                                "typeString": "struct Counters.Counter storage ref"
                              }
                            },
                            "id": 3601,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "increment",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1655,
                            "src": "6277:20:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$1629_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$1629_storage_ptr_$",
                              "typeString": "function (struct Counters.Counter storage pointer)"
                            }
                          },
                          "id": 3602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6277:22:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3603,
                        "nodeType": "ExpressionStatement",
                        "src": "6277:22:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3605,
                              "name": "seller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3558,
                              "src": "6320:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "expression": {
                                "id": 3606,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "6328:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "6328:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3608,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3535,
                              "src": "6340:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3604,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3910
                            ],
                            "referencedDeclaration": 3910,
                            "src": "6310:9:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6310:38:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3610,
                        "nodeType": "ExpressionStatement",
                        "src": "6310:38:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3616,
                              "name": "listPrice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2954,
                              "src": "6382:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3613,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2951,
                                  "src": "6366:5:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 3612,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6358:8:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 3611,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6358:8:16",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3614,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6358:14:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 3615,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "src": "6358:23:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 3617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6358:34:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3618,
                        "nodeType": "ExpressionStatement",
                        "src": "6358:34:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3622,
                              "name": "sellerAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3580,
                              "src": "6418:12:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 3619,
                              "name": "seller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3558,
                              "src": "6402:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 3621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "src": "6402:15:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 3623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6402:29:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3624,
                        "nodeType": "ExpressionStatement",
                        "src": "6402:29:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3630,
                              "name": "commission",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3572,
                              "src": "6465:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3627,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2951,
                                  "src": "6449:5:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 3626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6441:8:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 3625,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6441:8:16",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6441:14:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 3629,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "src": "6441:23:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 3631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6441:35:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3632,
                        "nodeType": "ExpressionStatement",
                        "src": "6441:35:16"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3634,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3535,
                              "src": "6522:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 3635,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "6543:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3636,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "6543:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3637,
                              "name": "seller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3558,
                              "src": "6567:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 3638,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3565,
                              "src": "6587:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3633,
                            "name": "TokenSaleSuccess",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3038,
                            "src": "6492:16:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,address,address,uint256)"
                            }
                          },
                          "id": 3639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6492:110:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3640,
                        "nodeType": "EmitStatement",
                        "src": "6487:115:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3642,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3535,
                              "src": "6632:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 3643,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "6641:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3644,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "6641:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3645,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3565,
                              "src": "6653:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3641,
                            "name": "updateTokenHistory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4016,
                            "src": "6613:18:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,address,uint256)"
                            }
                          },
                          "id": 3646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6613:46:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3647,
                        "nodeType": "ExpressionStatement",
                        "src": "6613:46:16"
                      }
                    ]
                  },
                  "functionSelector": "9b1225c4",
                  "id": 3649,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "executeSale",
                  "nameLocation": "5717:11:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3536,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3535,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "5737:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3649,
                        "src": "5729:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3534,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5729:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5728:17:16"
                  },
                  "returnParameters": {
                    "id": 3537,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5761:0:16"
                  },
                  "scope": 4017,
                  "src": "5708:958:16",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3726,
                    "nodeType": "Block",
                    "src": "6740:663:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3663,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 3657,
                                    "name": "idToListedToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3001,
                                    "src": "6758:15:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                      "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                    }
                                  },
                                  "id": 3659,
                                  "indexExpression": {
                                    "id": 3658,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3651,
                                    "src": "6774:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "6758:24:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                    "typeString": "struct NFTPromolider.ListedToken storage ref"
                                  }
                                },
                                "id": 3660,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2975,
                                "src": "6758:30:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "id": 3661,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "6792:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3662,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "6792:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "6758:44:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4f6e6c79206974656d206f776e65722063616e20706572666f726d2074686973206f7065726174696f6e",
                              "id": 3664,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6804:44:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9074ba32ca71a33be0d5bad3f82b59a588b5f08f53731795bb0723c24a23290d",
                                "typeString": "literal_string \"Only item owner can perform this operation\""
                              },
                              "value": "Only item owner can perform this operation"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9074ba32ca71a33be0d5bad3f82b59a588b5f08f53731795bb0723c24a23290d",
                                "typeString": "literal_string \"Only item owner can perform this operation\""
                              }
                            ],
                            "id": 3656,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6750:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6750:99:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3666,
                        "nodeType": "ExpressionStatement",
                        "src": "6750:99:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 3673,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 3668,
                                    "name": "idToListedToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3001,
                                    "src": "6867:15:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                      "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                    }
                                  },
                                  "id": 3670,
                                  "indexExpression": {
                                    "id": 3669,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3651,
                                    "src": "6883:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "6867:24:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                    "typeString": "struct NFTPromolider.ListedToken storage ref"
                                  }
                                },
                                "id": 3671,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "currentlyListed",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2981,
                                "src": "6867:40:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "66616c7365",
                                "id": 3672,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6911:5:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "src": "6867:49:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e667420697320616c7265616479206c6973746564",
                              "id": 3674,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6917:23:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ad0c789652ea4140f68457b2e431e4064b30c112e50e6f29db9147aeb72df39e",
                                "typeString": "literal_string \"Nft is already listed\""
                              },
                              "value": "Nft is already listed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ad0c789652ea4140f68457b2e431e4064b30c112e50e6f29db9147aeb72df39e",
                                "typeString": "literal_string \"Nft is already listed\""
                              }
                            ],
                            "id": 3667,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6859:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3675,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6859:82:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3676,
                        "nodeType": "ExpressionStatement",
                        "src": "6859:82:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3681,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 3678,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "6959:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3679,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "6959:9:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 3680,
                                "name": "listPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2954,
                                "src": "6972:9:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6959:22:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5072696365206d75737420626520657175616c20746f206c697374696e67207072696365",
                              "id": 3682,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6983:38:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c4c9b34e8a44a82a4ba8962937a0e0f0afa9206f6a506fa182ac004768974dd1",
                                "typeString": "literal_string \"Price must be equal to listing price\""
                              },
                              "value": "Price must be equal to listing price"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c4c9b34e8a44a82a4ba8962937a0e0f0afa9206f6a506fa182ac004768974dd1",
                                "typeString": "literal_string \"Price must be equal to listing price\""
                              }
                            ],
                            "id": 3677,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6951:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3683,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6951:71:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3684,
                        "nodeType": "ExpressionStatement",
                        "src": "6951:71:16"
                      },
                      {
                        "expression": {
                          "id": 3690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3685,
                                "name": "idToListedToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3001,
                                "src": "7033:15:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                  "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                }
                              },
                              "id": 3687,
                              "indexExpression": {
                                "id": 3686,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3651,
                                "src": "7049:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7033:24:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                "typeString": "struct NFTPromolider.ListedToken storage ref"
                              }
                            },
                            "id": 3688,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "currentlyListed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2981,
                            "src": "7033:40:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 3689,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7076:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "7033:47:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3691,
                        "nodeType": "ExpressionStatement",
                        "src": "7033:47:16"
                      },
                      {
                        "expression": {
                          "id": 3697,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3692,
                                "name": "idToListedToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3001,
                                "src": "7090:15:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                  "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                }
                              },
                              "id": 3694,
                              "indexExpression": {
                                "id": 3693,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3651,
                                "src": "7106:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7090:24:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                "typeString": "struct NFTPromolider.ListedToken storage ref"
                              }
                            },
                            "id": 3695,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "price",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2979,
                            "src": "7090:30:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3696,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3653,
                            "src": "7123:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7090:38:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3698,
                        "nodeType": "ExpressionStatement",
                        "src": "7090:38:16"
                      },
                      {
                        "expression": {
                          "id": 3708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3699,
                                "name": "idToListedToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3001,
                                "src": "7138:15:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                  "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                }
                              },
                              "id": 3701,
                              "indexExpression": {
                                "id": 3700,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3651,
                                "src": "7154:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7138:24:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                "typeString": "struct NFTPromolider.ListedToken storage ref"
                              }
                            },
                            "id": 3702,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "seller",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2977,
                            "src": "7138:31:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 3705,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "7180:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3706,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "7180:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3704,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7172:8:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_payable_$",
                                "typeString": "type(address payable)"
                              },
                              "typeName": {
                                "id": 3703,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "7172:8:16",
                                "stateMutability": "payable",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3707,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7172:19:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "7138:53:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 3709,
                        "nodeType": "ExpressionStatement",
                        "src": "7138:53:16"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3711,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3651,
                              "src": "7239:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 3712,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "7260:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3713,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "7260:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 3716,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "7292:4:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_NFTPromolider_$4017",
                                    "typeString": "contract NFTPromolider"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_NFTPromolider_$4017",
                                    "typeString": "contract NFTPromolider"
                                  }
                                ],
                                "id": 3715,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7284:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 3714,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7284:7:16",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3717,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7284:13:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3718,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3653,
                              "src": "7311:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "74727565",
                              "id": 3719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7330:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 3720,
                                  "name": "idToListedToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3001,
                                  "src": "7348:15:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                    "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                  }
                                },
                                "id": 3722,
                                "indexExpression": {
                                  "id": 3721,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3651,
                                  "src": "7364:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7348:24:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                  "typeString": "struct NFTPromolider.ListedToken storage ref"
                                }
                              },
                              "id": 3723,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collection",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2984,
                              "src": "7348:35:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Collection_$2971",
                                "typeString": "enum NFTPromolider.Collection"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_enum$_Collection_$2971",
                                "typeString": "enum NFTPromolider.Collection"
                              }
                            ],
                            "id": 3710,
                            "name": "TokenListedSuccess",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3028,
                            "src": "7207:18:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_enum$_Collection_$2971_$returns$__$",
                              "typeString": "function (uint256,address,address,uint256,bool,enum NFTPromolider.Collection)"
                            }
                          },
                          "id": 3724,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7207:188:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3725,
                        "nodeType": "EmitStatement",
                        "src": "7202:193:16"
                      }
                    ]
                  },
                  "functionSelector": "e219fc75",
                  "id": 3727,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "resellToken",
                  "nameLocation": "6681:11:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3654,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3651,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "6701:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3727,
                        "src": "6693:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3650,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6693:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3653,
                        "mutability": "mutable",
                        "name": "price",
                        "nameLocation": "6718:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3727,
                        "src": "6710:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3652,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6710:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6692:32:16"
                  },
                  "returnParameters": {
                    "id": 3655,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6740:0:16"
                  },
                  "scope": 4017,
                  "src": "6672:731:16",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3781,
                    "nodeType": "Block",
                    "src": "7462:537:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3739,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 3733,
                                    "name": "idToListedToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3001,
                                    "src": "7480:15:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                      "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                    }
                                  },
                                  "id": 3735,
                                  "indexExpression": {
                                    "id": 3734,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3729,
                                    "src": "7496:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "7480:24:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                    "typeString": "struct NFTPromolider.ListedToken storage ref"
                                  }
                                },
                                "id": 3736,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2975,
                                "src": "7480:30:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "id": 3737,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "7514:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3738,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "7514:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "7480:44:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4f6e6c79206974656d206f776e65722063616e20706572666f726d2074686973206f7065726174696f6e",
                              "id": 3740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7526:44:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9074ba32ca71a33be0d5bad3f82b59a588b5f08f53731795bb0723c24a23290d",
                                "typeString": "literal_string \"Only item owner can perform this operation\""
                              },
                              "value": "Only item owner can perform this operation"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9074ba32ca71a33be0d5bad3f82b59a588b5f08f53731795bb0723c24a23290d",
                                "typeString": "literal_string \"Only item owner can perform this operation\""
                              }
                            ],
                            "id": 3732,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7472:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7472:99:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3742,
                        "nodeType": "ExpressionStatement",
                        "src": "7472:99:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 3749,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 3744,
                                    "name": "idToListedToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3001,
                                    "src": "7589:15:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                      "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                    }
                                  },
                                  "id": 3746,
                                  "indexExpression": {
                                    "id": 3745,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3729,
                                    "src": "7605:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "7589:24:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                    "typeString": "struct NFTPromolider.ListedToken storage ref"
                                  }
                                },
                                "id": 3747,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "currentlyListed",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2981,
                                "src": "7589:40:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "74727565",
                                "id": 3748,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7633:4:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "src": "7589:48:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e667420697320616c726561647920756e6c6973746564",
                              "id": 3750,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7638:25:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_4d501a687ef5586dfea283dab8d120f7affd74ec80de3d272e6d2fe8fcc0930b",
                                "typeString": "literal_string \"Nft is already unlisted\""
                              },
                              "value": "Nft is already unlisted"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_4d501a687ef5586dfea283dab8d120f7affd74ec80de3d272e6d2fe8fcc0930b",
                                "typeString": "literal_string \"Nft is already unlisted\""
                              }
                            ],
                            "id": 3743,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7581:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7581:83:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3752,
                        "nodeType": "ExpressionStatement",
                        "src": "7581:83:16"
                      },
                      {
                        "expression": {
                          "id": 3758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3753,
                                "name": "idToListedToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3001,
                                "src": "7675:15:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                  "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                }
                              },
                              "id": 3755,
                              "indexExpression": {
                                "id": 3754,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3729,
                                "src": "7691:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7675:24:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                "typeString": "struct NFTPromolider.ListedToken storage ref"
                              }
                            },
                            "id": 3756,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "currentlyListed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2981,
                            "src": "7675:40:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 3757,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7718:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "7675:48:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3759,
                        "nodeType": "ExpressionStatement",
                        "src": "7675:48:16"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3761,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3729,
                              "src": "7771:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 3762,
                                  "name": "idToListedToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3001,
                                  "src": "7792:15:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                    "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                  }
                                },
                                "id": 3764,
                                "indexExpression": {
                                  "id": 3763,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3729,
                                  "src": "7808:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7792:24:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                  "typeString": "struct NFTPromolider.ListedToken storage ref"
                                }
                              },
                              "id": 3765,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2975,
                              "src": "7792:30:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 3766,
                                  "name": "idToListedToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3001,
                                  "src": "7836:15:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                    "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                  }
                                },
                                "id": 3768,
                                "indexExpression": {
                                  "id": 3767,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3729,
                                  "src": "7852:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7836:24:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                  "typeString": "struct NFTPromolider.ListedToken storage ref"
                                }
                              },
                              "id": 3769,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "seller",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2977,
                              "src": "7836:31:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 3770,
                                  "name": "idToListedToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3001,
                                  "src": "7881:15:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                    "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                  }
                                },
                                "id": 3772,
                                "indexExpression": {
                                  "id": 3771,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3729,
                                  "src": "7897:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7881:24:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                  "typeString": "struct NFTPromolider.ListedToken storage ref"
                                }
                              },
                              "id": 3773,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "price",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2979,
                              "src": "7881:30:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "66616c7365",
                              "id": 3774,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7925:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 3775,
                                  "name": "idToListedToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3001,
                                  "src": "7944:15:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                    "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                  }
                                },
                                "id": 3777,
                                "indexExpression": {
                                  "id": 3776,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3729,
                                  "src": "7960:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7944:24:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                  "typeString": "struct NFTPromolider.ListedToken storage ref"
                                }
                              },
                              "id": 3778,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collection",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2984,
                              "src": "7944:35:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Collection_$2971",
                                "typeString": "enum NFTPromolider.Collection"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_enum$_Collection_$2971",
                                "typeString": "enum NFTPromolider.Collection"
                              }
                            ],
                            "id": 3760,
                            "name": "TokenListedSuccess",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3028,
                            "src": "7739:18:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_enum$_Collection_$2971_$returns$__$",
                              "typeString": "function (uint256,address,address,uint256,bool,enum NFTPromolider.Collection)"
                            }
                          },
                          "id": 3779,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7739:252:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3780,
                        "nodeType": "EmitStatement",
                        "src": "7734:257:16"
                      }
                    ]
                  },
                  "functionSelector": "446bb3d8",
                  "id": 3782,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unSellToken",
                  "nameLocation": "7418:11:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3730,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3729,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "7438:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3782,
                        "src": "7430:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3728,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7430:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7429:17:16"
                  },
                  "returnParameters": {
                    "id": 3731,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7462:0:16"
                  },
                  "scope": 4017,
                  "src": "7409:590:16",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1035
                  ],
                  "body": {
                    "id": 3810,
                    "nodeType": "Block",
                    "src": "8090:108:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3795,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3784,
                              "src": "8119:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3796,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3786,
                              "src": "8125:2:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3797,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3788,
                              "src": "8129:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 3792,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "8100:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_NFTPromolider_$4017_$",
                                "typeString": "type(contract super NFTPromolider)"
                              }
                            },
                            "id": 3794,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 364,
                            "src": "8100:18:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8100:37:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3799,
                        "nodeType": "ExpressionStatement",
                        "src": "8100:37:16"
                      },
                      {
                        "expression": {
                          "id": 3808,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3800,
                                "name": "idToListedToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3001,
                                "src": "8147:15:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                  "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                }
                              },
                              "id": 3802,
                              "indexExpression": {
                                "id": 3801,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3788,
                                "src": "8163:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8147:24:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                "typeString": "struct NFTPromolider.ListedToken storage ref"
                              }
                            },
                            "id": 3803,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2975,
                            "src": "8147:30:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3806,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3786,
                                "src": "8188:2:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3805,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8180:8:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_payable_$",
                                "typeString": "type(address payable)"
                              },
                              "typeName": {
                                "id": 3804,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8180:8:16",
                                "stateMutability": "payable",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3807,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8180:11:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "8147:44:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 3809,
                        "nodeType": "ExpressionStatement",
                        "src": "8147:44:16"
                      }
                    ]
                  },
                  "functionSelector": "23b872dd",
                  "id": 3811,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "8018:12:16",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3790,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8081:8:16"
                  },
                  "parameters": {
                    "id": 3789,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3784,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "8039:4:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3811,
                        "src": "8031:12:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3783,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8031:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3786,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8053:2:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3811,
                        "src": "8045:10:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3785,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8045:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3788,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "8065:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3811,
                        "src": "8057:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3787,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8057:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8030:43:16"
                  },
                  "returnParameters": {
                    "id": 3791,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8090:0:16"
                  },
                  "scope": 4017,
                  "src": "8009:189:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1025
                  ],
                  "body": {
                    "id": 3839,
                    "nodeType": "Block",
                    "src": "8289:112:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3824,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3813,
                              "src": "8322:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3825,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3815,
                              "src": "8328:2:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3826,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3817,
                              "src": "8332:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 3821,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "8299:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_NFTPromolider_$4017_$",
                                "typeString": "type(contract super NFTPromolider)"
                              }
                            },
                            "id": 3823,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 383,
                            "src": "8299:22:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3827,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8299:41:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3828,
                        "nodeType": "ExpressionStatement",
                        "src": "8299:41:16"
                      },
                      {
                        "expression": {
                          "id": 3837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3829,
                                "name": "idToListedToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3001,
                                "src": "8350:15:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                  "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                }
                              },
                              "id": 3831,
                              "indexExpression": {
                                "id": 3830,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3817,
                                "src": "8366:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8350:24:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                "typeString": "struct NFTPromolider.ListedToken storage ref"
                              }
                            },
                            "id": 3832,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2975,
                            "src": "8350:30:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3835,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3815,
                                "src": "8391:2:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3834,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8383:8:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_payable_$",
                                "typeString": "type(address payable)"
                              },
                              "typeName": {
                                "id": 3833,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8383:8:16",
                                "stateMutability": "payable",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3836,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8383:11:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "8350:44:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 3838,
                        "nodeType": "ExpressionStatement",
                        "src": "8350:44:16"
                      }
                    ]
                  },
                  "functionSelector": "42842e0e",
                  "id": 3840,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "8213:16:16",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3819,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8280:8:16"
                  },
                  "parameters": {
                    "id": 3818,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3813,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "8238:4:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3840,
                        "src": "8230:12:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3812,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8230:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3815,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8252:2:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3840,
                        "src": "8244:10:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3814,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8244:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3817,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "8264:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3840,
                        "src": "8256:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3816,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8256:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8229:43:16"
                  },
                  "returnParameters": {
                    "id": 3820,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8289:0:16"
                  },
                  "scope": 4017,
                  "src": "8204:197:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1015
                  ],
                  "body": {
                    "id": 3871,
                    "nodeType": "Block",
                    "src": "8512:119:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3855,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3842,
                              "src": "8545:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3856,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3844,
                              "src": "8551:2:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3857,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3846,
                              "src": "8555:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3858,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3848,
                              "src": "8564:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 3852,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "8522:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_NFTPromolider_$4017_$",
                                "typeString": "type(contract super NFTPromolider)"
                              }
                            },
                            "id": 3854,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 413,
                            "src": "8522:22:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,bytes memory)"
                            }
                          },
                          "id": 3859,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8522:48:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3860,
                        "nodeType": "ExpressionStatement",
                        "src": "8522:48:16"
                      },
                      {
                        "expression": {
                          "id": 3869,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3861,
                                "name": "idToListedToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3001,
                                "src": "8580:15:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                  "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                }
                              },
                              "id": 3863,
                              "indexExpression": {
                                "id": 3862,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3846,
                                "src": "8596:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8580:24:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                "typeString": "struct NFTPromolider.ListedToken storage ref"
                              }
                            },
                            "id": 3864,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2975,
                            "src": "8580:30:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3867,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3844,
                                "src": "8621:2:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3866,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8613:8:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_payable_$",
                                "typeString": "type(address payable)"
                              },
                              "typeName": {
                                "id": 3865,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8613:8:16",
                                "stateMutability": "payable",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3868,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8613:11:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "8580:44:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 3870,
                        "nodeType": "ExpressionStatement",
                        "src": "8580:44:16"
                      }
                    ]
                  },
                  "functionSelector": "b88d4fde",
                  "id": 3872,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "8416:16:16",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3850,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8503:8:16"
                  },
                  "parameters": {
                    "id": 3849,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3842,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "8441:4:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3872,
                        "src": "8433:12:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3841,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8433:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3844,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8455:2:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3872,
                        "src": "8447:10:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3843,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8447:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3846,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "8467:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3872,
                        "src": "8459:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3845,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8459:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3848,
                        "mutability": "mutable",
                        "name": "_data",
                        "nameLocation": "8489:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3872,
                        "src": "8476:18:16",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3847,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "8476:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8432:63:16"
                  },
                  "returnParameters": {
                    "id": 3851,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8512:0:16"
                  },
                  "scope": 4017,
                  "src": "8407:224:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    780
                  ],
                  "body": {
                    "id": 3909,
                    "nodeType": "Block",
                    "src": "8717:196:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3887,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "8736:41:16",
                              "subExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 3883,
                                    "name": "idToListedToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3001,
                                    "src": "8737:15:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                      "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                    }
                                  },
                                  "id": 3885,
                                  "indexExpression": {
                                    "id": 3884,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3878,
                                    "src": "8753:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "8737:24:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                    "typeString": "struct NFTPromolider.ListedToken storage ref"
                                  }
                                },
                                "id": 3886,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "currentlyListed",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2981,
                                "src": "8737:40:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "546f6b656e2069732063757272656e746c79206c6973746564",
                              "id": 3888,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8779:27:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_550a7aee525cdb37d467337d41c46aeb640864cb4ae546c986b5f99592f870ea",
                                "typeString": "literal_string \"Token is currently listed\""
                              },
                              "value": "Token is currently listed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_550a7aee525cdb37d467337d41c46aeb640864cb4ae546c986b5f99592f870ea",
                                "typeString": "literal_string \"Token is currently listed\""
                              }
                            ],
                            "id": 3882,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8728:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3889,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8728:79:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3890,
                        "nodeType": "ExpressionStatement",
                        "src": "8728:79:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3894,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3874,
                              "src": "8833:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3895,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3876,
                              "src": "8839:2:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3896,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3878,
                              "src": "8843:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 3891,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "8817:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_NFTPromolider_$4017_$",
                                "typeString": "type(contract super NFTPromolider)"
                              }
                            },
                            "id": 3893,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 780,
                            "src": "8817:15:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3897,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8817:34:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3898,
                        "nodeType": "ExpressionStatement",
                        "src": "8817:34:16"
                      },
                      {
                        "expression": {
                          "id": 3907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3899,
                                "name": "idToListedToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3001,
                                "src": "8862:15:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                  "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                }
                              },
                              "id": 3901,
                              "indexExpression": {
                                "id": 3900,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3878,
                                "src": "8878:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8862:24:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                "typeString": "struct NFTPromolider.ListedToken storage ref"
                              }
                            },
                            "id": 3902,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2975,
                            "src": "8862:30:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3905,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3876,
                                "src": "8903:2:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3904,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8895:8:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_payable_$",
                                "typeString": "type(address payable)"
                              },
                              "typeName": {
                                "id": 3903,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8895:8:16",
                                "stateMutability": "payable",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3906,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8895:11:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "8862:44:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 3908,
                        "nodeType": "ExpressionStatement",
                        "src": "8862:44:16"
                      }
                    ]
                  },
                  "id": 3910,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nameLocation": "8646:9:16",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3880,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8708:8:16"
                  },
                  "parameters": {
                    "id": 3879,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3874,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "8664:4:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3910,
                        "src": "8656:12:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3873,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8656:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3876,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8678:2:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3910,
                        "src": "8670:10:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3875,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8670:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3878,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "8690:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3910,
                        "src": "8682:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3877,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8682:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8655:43:16"
                  },
                  "returnParameters": {
                    "id": 3881,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8717:0:16"
                  },
                  "scope": 4017,
                  "src": "8637:276:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3952,
                    "nodeType": "Block",
                    "src": "8978:315:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3924,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 3918,
                                    "name": "idToListedToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3001,
                                    "src": "9000:15:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                      "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                    }
                                  },
                                  "id": 3920,
                                  "indexExpression": {
                                    "id": 3919,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3914,
                                    "src": "9016:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "9000:24:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                    "typeString": "struct NFTPromolider.ListedToken storage ref"
                                  }
                                },
                                "id": 3921,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2975,
                                "src": "9000:30:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "id": 3922,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "9034:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3923,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "9034:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "9000:44:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4f6e6c79206974656d206f776e65722063616e207472616e73666572",
                              "id": 3925,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9046:30:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f9362b4338ee38e8d4b2edd3f052338cf486175c26ae2491afc37439b965fb19",
                                "typeString": "literal_string \"Only item owner can transfer\""
                              },
                              "value": "Only item owner can transfer"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f9362b4338ee38e8d4b2edd3f052338cf486175c26ae2491afc37439b965fb19",
                                "typeString": "literal_string \"Only item owner can transfer\""
                              }
                            ],
                            "id": 3917,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8992:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3926,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8992:85:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3927,
                        "nodeType": "ExpressionStatement",
                        "src": "8992:85:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3933,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "9095:41:16",
                              "subExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 3929,
                                    "name": "idToListedToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3001,
                                    "src": "9096:15:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ListedToken_$2985_storage_$",
                                      "typeString": "mapping(uint256 => struct NFTPromolider.ListedToken storage ref)"
                                    }
                                  },
                                  "id": 3931,
                                  "indexExpression": {
                                    "id": 3930,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3914,
                                    "src": "9112:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "9096:24:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ListedToken_$2985_storage",
                                    "typeString": "struct NFTPromolider.ListedToken storage ref"
                                  }
                                },
                                "id": 3932,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "currentlyListed",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2981,
                                "src": "9096:40:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "546f6b656e2069732063757272656e746c79206c6973746564",
                              "id": 3934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9138:27:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_550a7aee525cdb37d467337d41c46aeb640864cb4ae546c986b5f99592f870ea",
                                "typeString": "literal_string \"Token is currently listed\""
                              },
                              "value": "Token is currently listed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_550a7aee525cdb37d467337d41c46aeb640864cb4ae546c986b5f99592f870ea",
                                "typeString": "literal_string \"Token is currently listed\""
                              }
                            ],
                            "id": 3928,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9087:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9087:79:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3936,
                        "nodeType": "ExpressionStatement",
                        "src": "9087:79:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3941,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 3938,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "9184:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3939,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "9184:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 3940,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3912,
                                "src": "9198:2:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "9184:16:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4f6e6c792063616e207472616e73666572656420746f206f74686572732077616c6c6574",
                              "id": 3942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9202:38:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_84119526d456dcf2f6af49e086aa4eb21c7aff51b29ee8e478c8a78cf4befc97",
                                "typeString": "literal_string \"Only can transfered to others wallet\""
                              },
                              "value": "Only can transfered to others wallet"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_84119526d456dcf2f6af49e086aa4eb21c7aff51b29ee8e478c8a78cf4befc97",
                                "typeString": "literal_string \"Only can transfered to others wallet\""
                              }
                            ],
                            "id": 3937,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9176:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9176:65:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3944,
                        "nodeType": "ExpressionStatement",
                        "src": "9176:65:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 3946,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "9262:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3947,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "9262:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3948,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3912,
                              "src": "9274:2:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3949,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3914,
                              "src": "9278:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3945,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3910
                            ],
                            "referencedDeclaration": 3910,
                            "src": "9252:9:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9252:34:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3951,
                        "nodeType": "ExpressionStatement",
                        "src": "9252:34:16"
                      }
                    ]
                  },
                  "functionSelector": "1072cbea",
                  "id": 3953,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferToken",
                  "nameLocation": "8928:13:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3915,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3912,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8950:2:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3953,
                        "src": "8942:10:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3911,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8942:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3914,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "8962:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3953,
                        "src": "8954:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3913,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8954:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8941:29:16"
                  },
                  "returnParameters": {
                    "id": 3916,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8978:0:16"
                  },
                  "scope": 4017,
                  "src": "8919:374:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4015,
                    "nodeType": "Block",
                    "src": "9385:392:16",
                    "statements": [
                      {
                        "assignments": [
                          3966
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3966,
                            "mutability": "mutable",
                            "name": "history",
                            "nameLocation": "9418:7:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 4015,
                            "src": "9395:30:16",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr",
                              "typeString": "struct NFTPromolider.TokenHistory[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3964,
                                "nodeType": "UserDefinedTypeName",
                                "pathNode": {
                                  "id": 3963,
                                  "name": "TokenHistory",
                                  "nodeType": "IdentifierPath",
                                  "referencedDeclaration": 2992,
                                  "src": "9395:12:16"
                                },
                                "referencedDeclaration": 2992,
                                "src": "9395:12:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenHistory_$2992_storage_ptr",
                                  "typeString": "struct NFTPromolider.TokenHistory"
                                }
                              },
                              "id": 3965,
                              "nodeType": "ArrayTypeName",
                              "src": "9395:14:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr",
                                "typeString": "struct NFTPromolider.TokenHistory[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3970,
                        "initialValue": {
                          "baseExpression": {
                            "id": 3967,
                            "name": "idToTokenHistory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3007,
                            "src": "9428:16:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_$",
                              "typeString": "mapping(uint256 => struct NFTPromolider.TokenHistory storage ref[] storage ref)"
                            }
                          },
                          "id": 3969,
                          "indexExpression": {
                            "id": 3968,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3955,
                            "src": "9445:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9428:25:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage",
                            "typeString": "struct NFTPromolider.TokenHistory storage ref[] storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9395:58:16"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3974,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 3971,
                              "name": "history",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3966,
                              "src": "9467:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr",
                                "typeString": "struct NFTPromolider.TokenHistory storage ref[] storage pointer"
                              }
                            },
                            "id": 3972,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "9467:14:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "33",
                            "id": 3973,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9485:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3_by_1",
                              "typeString": "int_const 3"
                            },
                            "value": "3"
                          },
                          "src": "9467:19:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4003,
                        "nodeType": "IfStatement",
                        "src": "9463:165:16",
                        "trueBody": {
                          "id": 4002,
                          "nodeType": "Block",
                          "src": "9488:140:16",
                          "statements": [
                            {
                              "body": {
                                "id": 3995,
                                "nodeType": "Block",
                                "src": "9531:60:16",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 3993,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 3985,
                                          "name": "history",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3966,
                                          "src": "9549:7:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr",
                                            "typeString": "struct NFTPromolider.TokenHistory storage ref[] storage pointer"
                                          }
                                        },
                                        "id": 3987,
                                        "indexExpression": {
                                          "id": 3986,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3976,
                                          "src": "9557:1:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "9549:10:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_TokenHistory_$2992_storage",
                                          "typeString": "struct NFTPromolider.TokenHistory storage ref"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "baseExpression": {
                                          "id": 3988,
                                          "name": "history",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3966,
                                          "src": "9562:7:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr",
                                            "typeString": "struct NFTPromolider.TokenHistory storage ref[] storage pointer"
                                          }
                                        },
                                        "id": 3992,
                                        "indexExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 3991,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 3989,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3976,
                                            "src": "9570:1:16",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "+",
                                          "rightExpression": {
                                            "hexValue": "31",
                                            "id": 3990,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "9574:1:16",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "9570:5:16",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "9562:14:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_TokenHistory_$2992_storage",
                                          "typeString": "struct NFTPromolider.TokenHistory storage ref"
                                        }
                                      },
                                      "src": "9549:27:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TokenHistory_$2992_storage",
                                        "typeString": "struct NFTPromolider.TokenHistory storage ref"
                                      }
                                    },
                                    "id": 3994,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9549:27:16"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3981,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3979,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3976,
                                  "src": "9519:1:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 3980,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9523:1:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "9519:5:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3996,
                              "initializationExpression": {
                                "assignments": [
                                  3976
                                ],
                                "declarations": [
                                  {
                                    "constant": false,
                                    "id": 3976,
                                    "mutability": "mutable",
                                    "name": "i",
                                    "nameLocation": "9512:1:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3996,
                                    "src": "9507:6:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "typeName": {
                                      "id": 3975,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "9507:4:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "visibility": "internal"
                                  }
                                ],
                                "id": 3978,
                                "initialValue": {
                                  "hexValue": "30",
                                  "id": 3977,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9516:1:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "nodeType": "VariableDeclarationStatement",
                                "src": "9507:10:16"
                              },
                              "loopExpression": {
                                "expression": {
                                  "id": 3983,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": false,
                                  "src": "9526:3:16",
                                  "subExpression": {
                                    "id": 3982,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3976,
                                    "src": "9526:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 3984,
                                "nodeType": "ExpressionStatement",
                                "src": "9526:3:16"
                              },
                              "nodeType": "ForStatement",
                              "src": "9502:89:16"
                            },
                            {
                              "expression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 3997,
                                    "name": "history",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3966,
                                    "src": "9604:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr",
                                      "typeString": "struct NFTPromolider.TokenHistory storage ref[] storage pointer"
                                    }
                                  },
                                  "id": 3999,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "pop",
                                  "nodeType": "MemberAccess",
                                  "src": "9604:11:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr_$",
                                    "typeString": "function (struct NFTPromolider.TokenHistory storage ref[] storage pointer)"
                                  }
                                },
                                "id": 4000,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9604:13:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4001,
                              "nodeType": "ExpressionStatement",
                              "src": "9604:13:16"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4008,
                                  "name": "newOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3957,
                                  "src": "9684:8:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4009,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3959,
                                  "src": "9713:5:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 4010,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "9743:5:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 4011,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "9743:15:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4007,
                                "name": "TokenHistory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2992,
                                "src": "9650:12:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_TokenHistory_$2992_storage_ptr_$",
                                  "typeString": "type(struct NFTPromolider.TokenHistory storage pointer)"
                                }
                              },
                              "id": 4012,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "owner",
                                "price",
                                "timestamp"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "9650:119:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenHistory_$2992_memory_ptr",
                                "typeString": "struct NFTPromolider.TokenHistory memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_TokenHistory_$2992_memory_ptr",
                                "typeString": "struct NFTPromolider.TokenHistory memory"
                              }
                            ],
                            "expression": {
                              "id": 4004,
                              "name": "history",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3966,
                              "src": "9637:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr",
                                "typeString": "struct NFTPromolider.TokenHistory storage ref[] storage pointer"
                              }
                            },
                            "id": 4006,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "9637:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr_$_t_struct$_TokenHistory_$2992_storage_$returns$__$bound_to$_t_array$_t_struct$_TokenHistory_$2992_storage_$dyn_storage_ptr_$",
                              "typeString": "function (struct NFTPromolider.TokenHistory storage ref[] storage pointer,struct NFTPromolider.TokenHistory storage ref)"
                            }
                          },
                          "id": 4013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9637:133:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4014,
                        "nodeType": "ExpressionStatement",
                        "src": "9637:133:16"
                      }
                    ]
                  },
                  "id": 4016,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateTokenHistory",
                  "nameLocation": "9308:18:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3960,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3955,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "9335:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 4016,
                        "src": "9327:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3954,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9327:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3957,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "9352:8:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 4016,
                        "src": "9344:16:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3956,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9344:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3959,
                        "mutability": "mutable",
                        "name": "price",
                        "nameLocation": "9370:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 4016,
                        "src": "9362:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3958,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9362:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9326:50:16"
                  },
                  "returnParameters": {
                    "id": 3961,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9385:0:16"
                  },
                  "scope": 4017,
                  "src": "9299:478:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 4018,
              "src": "196:9584:16",
              "usedErrors": []
            }
          ],
          "src": "38:9743:16"
        },
        "id": 16
      }
    }
  }
}
