ETH Price: $2,707.88 (+0.40%)

Token

Toni Sanchez Collection (Oditto)
 

Overview

Max Total Supply

55 Oditto

Holders

28

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
XRAY by SABET: Deployer
Balance
1 Oditto
0x02eb75be1e72e988de64f0088d654d8ea1081e87
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NFT

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-24
*/

//SPDX-License-Identifier:MIT

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev 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;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev 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.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev 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`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev 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}.
 */
interface IERC165 {
    /**
     * @dev 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.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev 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.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev 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.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev 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.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * 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.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev 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.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev 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.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev 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}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _safeTransfer(from, to, tokenId, data);
    }

    /**
     * @dev 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.
     *
     * `data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: 55nfts.sol


pragma solidity ^0.8.12;

contract NFT is ERC721Enumerable, Ownable {
    using Counters for Counters.Counter;
    mapping(uint=>bool) isMinted;
    Counters.Counter private currentTokenId;

    string public baseTokenURI;
    constructor(string memory _name, string memory _symbol, string memory _baseTokenURI ) ERC721(_name, _symbol) {
        baseTokenURI = _baseTokenURI;
    }
    function FreeMint(uint mintId) public {
    require(mintId >=1 && mintId <= 55, "Mint ID must be between 1 and 55");
     _mint(msg.sender, mintId);
        isMinted[mintId] = true;
    }
    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }
    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        require( _exists(tokenId), "ERC721AMetadata: URI query for nonexistent token" );
        return string(abi.encodePacked(baseTokenURI, Strings.toString(tokenId),".json"));
    }

    function walletOfOwner(address _owner) public view returns (string[] memory)
        {
            uint256 ownerTokenCount = balanceOf(_owner);
             string[] memory NFTs = new string[](balanceOf(_owner));
            uint256[] memory tokenIds = new uint256[](ownerTokenCount);
            for (uint256 i; i < ownerTokenCount; i++) {
               tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
                NFTs[i] = string.concat(Strings.toString(tokenIds[i]), tokenURI(tokenIds[i]));
            }
            return NFTs;
        }
    function NFTList() public view returns(string[] memory){
        string[] memory NFTIDwithPrice = new string[](56);
        for(uint i = 1; i <= 55; i++){
                if(isMinted[i] == true){
                NFTIDwithPrice[i] = string.concat(Strings.toString(i),  " - Minted - ", tokenURI(i));
                }
                else{
                 NFTIDwithPrice[i] = string.concat(Strings.toString(i)," - Available");
                }
        }
        return NFTIDwithPrice;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_baseTokenURI","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"mintId","type":"uint256"}],"name":"FreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"NFTList","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"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":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"owner","outputs":[{"internalType":"address","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162003cd138038062003cd18339818101604052810190620000379190620003ca565b82828160009080519060200190620000519291906200017d565b5080600190805190602001906200006a9291906200017d565b5050506200008d62000081620000af60201b60201c565b620000b760201b60201c565b80600d9080519060200190620000a59291906200017d565b50505050620004e8565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200018b90620004b2565b90600052602060002090601f016020900481019282620001af5760008555620001fb565b82601f10620001ca57805160ff1916838001178555620001fb565b82800160010185558215620001fb579182015b82811115620001fa578251825591602001919060010190620001dd565b5b5090506200020a91906200020e565b5090565b5b80821115620002295760008160009055506001016200020f565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000296826200024b565b810181811067ffffffffffffffff82111715620002b857620002b76200025c565b5b80604052505050565b6000620002cd6200022d565b9050620002db82826200028b565b919050565b600067ffffffffffffffff821115620002fe57620002fd6200025c565b5b62000309826200024b565b9050602081019050919050565b60005b838110156200033657808201518184015260208101905062000319565b8381111562000346576000848401525b50505050565b6000620003636200035d84620002e0565b620002c1565b90508281526020810184848401111562000382576200038162000246565b5b6200038f84828562000316565b509392505050565b600082601f830112620003af57620003ae62000241565b5b8151620003c18482602086016200034c565b91505092915050565b600080600060608486031215620003e657620003e562000237565b5b600084015167ffffffffffffffff8111156200040757620004066200023c565b5b620004158682870162000397565b935050602084015167ffffffffffffffff8111156200043957620004386200023c565b5b620004478682870162000397565b925050604084015167ffffffffffffffff8111156200046b576200046a6200023c565b5b620004798682870162000397565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004cb57607f821691505b60208210811415620004e257620004e162000483565b5b50919050565b6137d980620004f86000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063b88d4fde1161007c578063b88d4fde146103b2578063bdfaa084146103ce578063c87b56dd146103ea578063d547cfb71461041a578063e985e9c514610438578063f2fde38b146104685761014d565b806370a0823114610302578063715018a6146103325780638da5cb5b1461033c57806395d89b411461035a578063a22cb46514610378578063b53c5dd6146103945761014d565b806323b872dd1161011557806323b872dd1461020a5780632f745c591461022657806342842e0e14610256578063438b6300146102725780634f6ccce7146102a25780636352211e146102d25761014d565b806301ffc9a71461015257806306fdde0314610182578063081812fc146101a0578063095ea7b3146101d057806318160ddd146101ec575b600080fd5b61016c60048036038101906101679190612307565b610484565b604051610179919061234f565b60405180910390f35b61018a6104fe565b6040516101979190612403565b60405180910390f35b6101ba60048036038101906101b5919061245b565b610590565b6040516101c791906124c9565b60405180910390f35b6101ea60048036038101906101e59190612510565b6105d6565b005b6101f46106ee565b604051610201919061255f565b60405180910390f35b610224600480360381019061021f919061257a565b6106fb565b005b610240600480360381019061023b9190612510565b61075b565b60405161024d919061255f565b60405180910390f35b610270600480360381019061026b919061257a565b610800565b005b61028c600480360381019061028791906125cd565b610820565b6040516102999190612706565b60405180910390f35b6102bc60048036038101906102b7919061245b565b6109ad565b6040516102c9919061255f565b60405180910390f35b6102ec60048036038101906102e7919061245b565b610a1e565b6040516102f991906124c9565b60405180910390f35b61031c600480360381019061031791906125cd565b610ad0565b604051610329919061255f565b60405180910390f35b61033a610b88565b005b610344610b9c565b60405161035191906124c9565b60405180910390f35b610362610bc6565b60405161036f9190612403565b60405180910390f35b610392600480360381019061038d9190612754565b610c58565b005b61039c610c6e565b6040516103a99190612706565b60405180910390f35b6103cc60048036038101906103c791906128c9565b610db6565b005b6103e860048036038101906103e3919061245b565b610e18565b005b61040460048036038101906103ff919061245b565b610ea2565b6040516104119190612403565b60405180910390f35b610422610f1e565b60405161042f9190612403565b60405180910390f35b610452600480360381019061044d919061294c565b610fac565b60405161045f919061234f565b60405180910390f35b610482600480360381019061047d91906125cd565b611040565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104f757506104f6826110c4565b5b9050919050565b60606000805461050d906129bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610539906129bb565b80156105865780601f1061055b57610100808354040283529160200191610586565b820191906000526020600020905b81548152906001019060200180831161056957829003601f168201915b5050505050905090565b600061059b826111a6565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105e182610a1e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064990612a5f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106716111f1565b73ffffffffffffffffffffffffffffffffffffffff1614806106a0575061069f8161069a6111f1565b610fac565b5b6106df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d690612af1565b60405180910390fd5b6106e983836111f9565b505050565b6000600880549050905090565b61070c6107066111f1565b826112b2565b61074b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074290612b83565b60405180910390fd5b610756838383611347565b505050565b600061076683610ad0565b82106107a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079e90612c15565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61081b83838360405180602001604052806000815250610db6565b505050565b6060600061082d83610ad0565b9050600061083a84610ad0565b67ffffffffffffffff8111156108535761085261279e565b5b60405190808252806020026020018201604052801561088657816020015b60608152602001906001900390816108715790505b50905060008267ffffffffffffffff8111156108a5576108a461279e565b5b6040519080825280602002602001820160405280156108d35781602001602082028036833780820191505090505b50905060005b838110156109a1576108eb868261075b565b8282815181106108fe576108fd612c35565b5b60200260200101818152505061092d8282815181106109205761091f612c35565b5b60200260200101516115ae565b61095083838151811061094357610942612c35565b5b6020026020010151610ea2565b604051602001610961929190612ca0565b60405160208183030381529060405283828151811061098357610982612c35565b5b6020026020010181905250808061099990612cf3565b9150506108d9565b50819350505050919050565b60006109b76106ee565b82106109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef90612dae565b60405180910390fd5b60088281548110610a0c57610a0b612c35565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe90612e1a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890612eac565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b9061170f565b610b9a600061178d565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610bd5906129bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610c01906129bb565b8015610c4e5780601f10610c2357610100808354040283529160200191610c4e565b820191906000526020600020905b815481529060010190602001808311610c3157829003601f168201915b5050505050905090565b610c6a610c636111f1565b8383611853565b5050565b60606000603867ffffffffffffffff811115610c8d57610c8c61279e565b5b604051908082528060200260200182016040528015610cc057816020015b6060815260200190600190039081610cab5790505b5090506000600190505b60378111610dae5760011515600b600083815260200190815260200160002060009054906101000a900460ff1615151415610d5457610d08816115ae565b610d1182610ea2565b604051602001610d22929190612ef2565b604051602081830303815290604052828281518110610d4457610d43612c35565b5b6020026020010181905250610d9b565b610d5d816115ae565b604051602001610d6d9190612f4b565b604051602081830303815290604052828281518110610d8f57610d8e612c35565b5b60200260200101819052505b8080610da690612cf3565b915050610cca565b508091505090565b610dc7610dc16111f1565b836112b2565b610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90612b83565b60405180910390fd5b610e12848484846119c0565b50505050565b60018110158015610e2a575060378111155b610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090612fbd565b60405180910390fd5b610e733382611a1c565b6001600b600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6060610ead82611bf6565b610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee39061304f565b60405180910390fd5b600d610ef7836115ae565b604051602001610f0892919061314f565b6040516020818303038152906040529050919050565b600d8054610f2b906129bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610f57906129bb565b8015610fa45780601f10610f7957610100808354040283529160200191610fa4565b820191906000526020600020905b815481529060010190602001808311610f8757829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61104861170f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af906131f0565b60405180910390fd5b6110c18161178d565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061118f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061119f575061119e82611c62565b5b9050919050565b6111af81611bf6565b6111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590612e1a565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661126c83610a1e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112be83610a1e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061130057506112ff8185610fac565b5b8061133e57508373ffffffffffffffffffffffffffffffffffffffff1661132684610590565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661136782610a1e565b73ffffffffffffffffffffffffffffffffffffffff16146113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490613282565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490613314565b60405180910390fd5b611438838383611ccc565b6114436000826111f9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114939190613334565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114ea9190613368565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115a9838383611de0565b505050565b606060008214156115f6576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061170a565b600082905060005b6000821461162857808061161190612cf3565b915050600a8261162191906133ed565b91506115fe565b60008167ffffffffffffffff8111156116445761164361279e565b5b6040519080825280601f01601f1916602001820160405280156116765781602001600182028036833780820191505090505b5090505b600085146117035760018261168f9190613334565b9150600a8561169e919061341e565b60306116aa9190613368565b60f81b8183815181106116c0576116bf612c35565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856116fc91906133ed565b945061167a565b8093505050505b919050565b6117176111f1565b73ffffffffffffffffffffffffffffffffffffffff16611735610b9c565b73ffffffffffffffffffffffffffffffffffffffff161461178b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117829061349b565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990613507565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119b3919061234f565b60405180910390a3505050565b6119cb848484611347565b6119d784848484611de5565b611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d90613599565b60405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390613605565b60405180910390fd5b611a9581611bf6565b15611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90613671565b60405180910390fd5b611ae160008383611ccc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b319190613368565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611bf260008383611de0565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611cd7838383611f6d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d1a57611d1581611f72565b611d59565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d5857611d578382611fbb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d9c57611d9781612128565b611ddb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611dda57611dd982826121f9565b5b5b505050565b505050565b6000611e068473ffffffffffffffffffffffffffffffffffffffff16612278565b15611f60578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e2f6111f1565b8786866040518563ffffffff1660e01b8152600401611e5194939291906136e6565b6020604051808303816000875af1925050508015611e8d57506040513d601f19601f82011682018060405250810190611e8a9190613747565b60015b611f10573d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b50600081511415611f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eff90613599565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f65565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611fc884610ad0565b611fd29190613334565b90506000600760008481526020019081526020016000205490508181146120b7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061213c9190613334565b905060006009600084815260200190815260200160002054905060006008838154811061216c5761216b612c35565b5b90600052602060002001549050806008838154811061218e5761218d612c35565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806121dd576121dc613774565b5b6001900381819060005260206000200160009055905550505050565b600061220483610ad0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6122e4816122af565b81146122ef57600080fd5b50565b600081359050612301816122db565b92915050565b60006020828403121561231d5761231c6122a5565b5b600061232b848285016122f2565b91505092915050565b60008115159050919050565b61234981612334565b82525050565b60006020820190506123646000830184612340565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123a4578082015181840152602081019050612389565b838111156123b3576000848401525b50505050565b6000601f19601f8301169050919050565b60006123d58261236a565b6123df8185612375565b93506123ef818560208601612386565b6123f8816123b9565b840191505092915050565b6000602082019050818103600083015261241d81846123ca565b905092915050565b6000819050919050565b61243881612425565b811461244357600080fd5b50565b6000813590506124558161242f565b92915050565b600060208284031215612471576124706122a5565b5b600061247f84828501612446565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124b382612488565b9050919050565b6124c3816124a8565b82525050565b60006020820190506124de60008301846124ba565b92915050565b6124ed816124a8565b81146124f857600080fd5b50565b60008135905061250a816124e4565b92915050565b60008060408385031215612527576125266122a5565b5b6000612535858286016124fb565b925050602061254685828601612446565b9150509250929050565b61255981612425565b82525050565b60006020820190506125746000830184612550565b92915050565b600080600060608486031215612593576125926122a5565b5b60006125a1868287016124fb565b93505060206125b2868287016124fb565b92505060406125c386828701612446565b9150509250925092565b6000602082840312156125e3576125e26122a5565b5b60006125f1848285016124fb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006126428261236a565b61264c8185612626565b935061265c818560208601612386565b612665816123b9565b840191505092915050565b600061267c8383612637565b905092915050565b6000602082019050919050565b600061269c826125fa565b6126a68185612605565b9350836020820285016126b885612616565b8060005b858110156126f457848403895281516126d58582612670565b94506126e083612684565b925060208a019950506001810190506126bc565b50829750879550505050505092915050565b600060208201905081810360008301526127208184612691565b905092915050565b61273181612334565b811461273c57600080fd5b50565b60008135905061274e81612728565b92915050565b6000806040838503121561276b5761276a6122a5565b5b6000612779858286016124fb565b925050602061278a8582860161273f565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127d6826123b9565b810181811067ffffffffffffffff821117156127f5576127f461279e565b5b80604052505050565b600061280861229b565b905061281482826127cd565b919050565b600067ffffffffffffffff8211156128345761283361279e565b5b61283d826123b9565b9050602081019050919050565b82818337600083830152505050565b600061286c61286784612819565b6127fe565b90508281526020810184848401111561288857612887612799565b5b61289384828561284a565b509392505050565b600082601f8301126128b0576128af612794565b5b81356128c0848260208601612859565b91505092915050565b600080600080608085870312156128e3576128e26122a5565b5b60006128f1878288016124fb565b9450506020612902878288016124fb565b935050604061291387828801612446565b925050606085013567ffffffffffffffff811115612934576129336122aa565b5b6129408782880161289b565b91505092959194509250565b60008060408385031215612963576129626122a5565b5b6000612971858286016124fb565b9250506020612982858286016124fb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806129d357607f821691505b602082108114156129e7576129e661298c565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a49602183612375565b9150612a54826129ed565b604082019050919050565b60006020820190508181036000830152612a7881612a3c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000612adb603e83612375565b9150612ae682612a7f565b604082019050919050565b60006020820190508181036000830152612b0a81612ace565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612b6d602e83612375565b9150612b7882612b11565b604082019050919050565b60006020820190508181036000830152612b9c81612b60565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000612bff602b83612375565b9150612c0a82612ba3565b604082019050919050565b60006020820190508181036000830152612c2e81612bf2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b6000612c7a8261236a565b612c848185612c64565b9350612c94818560208601612386565b80840191505092915050565b6000612cac8285612c6f565b9150612cb88284612c6f565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612cfe82612425565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d3157612d30612cc4565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000612d98602c83612375565b9150612da382612d3c565b604082019050919050565b60006020820190508181036000830152612dc781612d8b565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000612e04601883612375565b9150612e0f82612dce565b602082019050919050565b60006020820190508181036000830152612e3381612df7565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000612e96602983612375565b9150612ea182612e3a565b604082019050919050565b60006020820190508181036000830152612ec581612e89565b9050919050565b7f202d204d696e746564202d200000000000000000000000000000000000000000815250565b6000612efe8285612c6f565b9150612f0982612ecc565b600c82019150612f198284612c6f565b91508190509392505050565b7f202d20417661696c61626c650000000000000000000000000000000000000000815250565b6000612f578284612c6f565b9150612f6282612f25565b600c8201915081905092915050565b7f4d696e74204944206d757374206265206265747765656e203120616e64203535600082015250565b6000612fa7602083612375565b9150612fb282612f71565b602082019050919050565b60006020820190508181036000830152612fd681612f9a565b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b6000613039603083612375565b915061304482612fdd565b604082019050919050565b600060208201905081810360008301526130688161302c565b9050919050565b60008190508160005260206000209050919050565b60008154613091816129bb565b61309b8186612c64565b945060018216600081146130b657600181146130c7576130fa565b60ff198316865281860193506130fa565b6130d08561306f565b60005b838110156130f2578154818901526001820191506020810190506130d3565b838801955050505b50505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613139600583612c64565b915061314482613103565b600582019050919050565b600061315b8285613084565b91506131678284612c6f565b91506131728261312c565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131da602683612375565b91506131e58261317e565b604082019050919050565b60006020820190508181036000830152613209816131cd565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061326c602583612375565b915061327782613210565b604082019050919050565b6000602082019050818103600083015261329b8161325f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132fe602483612375565b9150613309826132a2565b604082019050919050565b6000602082019050818103600083015261332d816132f1565b9050919050565b600061333f82612425565b915061334a83612425565b92508282101561335d5761335c612cc4565b5b828203905092915050565b600061337382612425565b915061337e83612425565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133b3576133b2612cc4565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133f882612425565b915061340383612425565b925082613413576134126133be565b5b828204905092915050565b600061342982612425565b915061343483612425565b925082613444576134436133be565b5b828206905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613485602083612375565b91506134908261344f565b602082019050919050565b600060208201905081810360008301526134b481613478565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006134f1601983612375565b91506134fc826134bb565b602082019050919050565b60006020820190508181036000830152613520816134e4565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613583603283612375565b915061358e82613527565b604082019050919050565b600060208201905081810360008301526135b281613576565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006135ef602083612375565b91506135fa826135b9565b602082019050919050565b6000602082019050818103600083015261361e816135e2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061365b601c83612375565b915061366682613625565b602082019050919050565b6000602082019050818103600083015261368a8161364e565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006136b882613691565b6136c2818561369c565b93506136d2818560208601612386565b6136db816123b9565b840191505092915050565b60006080820190506136fb60008301876124ba565b61370860208301866124ba565b6137156040830185612550565b818103606083015261372781846136ad565b905095945050505050565b600081519050613741816122db565b92915050565b60006020828403121561375d5761375c6122a5565b5b600061376b84828501613732565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122061325a6b58ecf007d910baeb8b557877dfe4ddd8aee28f782bf485dc03a26c4c64736f6c634300080c0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000017546f6e692053616e6368657a20436f6c6c656374696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000064f646974746f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d50343643445273676268566268343175396b736e6245566d553175393359705453333656566e6651616443532f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063b88d4fde1161007c578063b88d4fde146103b2578063bdfaa084146103ce578063c87b56dd146103ea578063d547cfb71461041a578063e985e9c514610438578063f2fde38b146104685761014d565b806370a0823114610302578063715018a6146103325780638da5cb5b1461033c57806395d89b411461035a578063a22cb46514610378578063b53c5dd6146103945761014d565b806323b872dd1161011557806323b872dd1461020a5780632f745c591461022657806342842e0e14610256578063438b6300146102725780634f6ccce7146102a25780636352211e146102d25761014d565b806301ffc9a71461015257806306fdde0314610182578063081812fc146101a0578063095ea7b3146101d057806318160ddd146101ec575b600080fd5b61016c60048036038101906101679190612307565b610484565b604051610179919061234f565b60405180910390f35b61018a6104fe565b6040516101979190612403565b60405180910390f35b6101ba60048036038101906101b5919061245b565b610590565b6040516101c791906124c9565b60405180910390f35b6101ea60048036038101906101e59190612510565b6105d6565b005b6101f46106ee565b604051610201919061255f565b60405180910390f35b610224600480360381019061021f919061257a565b6106fb565b005b610240600480360381019061023b9190612510565b61075b565b60405161024d919061255f565b60405180910390f35b610270600480360381019061026b919061257a565b610800565b005b61028c600480360381019061028791906125cd565b610820565b6040516102999190612706565b60405180910390f35b6102bc60048036038101906102b7919061245b565b6109ad565b6040516102c9919061255f565b60405180910390f35b6102ec60048036038101906102e7919061245b565b610a1e565b6040516102f991906124c9565b60405180910390f35b61031c600480360381019061031791906125cd565b610ad0565b604051610329919061255f565b60405180910390f35b61033a610b88565b005b610344610b9c565b60405161035191906124c9565b60405180910390f35b610362610bc6565b60405161036f9190612403565b60405180910390f35b610392600480360381019061038d9190612754565b610c58565b005b61039c610c6e565b6040516103a99190612706565b60405180910390f35b6103cc60048036038101906103c791906128c9565b610db6565b005b6103e860048036038101906103e3919061245b565b610e18565b005b61040460048036038101906103ff919061245b565b610ea2565b6040516104119190612403565b60405180910390f35b610422610f1e565b60405161042f9190612403565b60405180910390f35b610452600480360381019061044d919061294c565b610fac565b60405161045f919061234f565b60405180910390f35b610482600480360381019061047d91906125cd565b611040565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104f757506104f6826110c4565b5b9050919050565b60606000805461050d906129bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610539906129bb565b80156105865780601f1061055b57610100808354040283529160200191610586565b820191906000526020600020905b81548152906001019060200180831161056957829003601f168201915b5050505050905090565b600061059b826111a6565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105e182610a1e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064990612a5f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106716111f1565b73ffffffffffffffffffffffffffffffffffffffff1614806106a0575061069f8161069a6111f1565b610fac565b5b6106df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d690612af1565b60405180910390fd5b6106e983836111f9565b505050565b6000600880549050905090565b61070c6107066111f1565b826112b2565b61074b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074290612b83565b60405180910390fd5b610756838383611347565b505050565b600061076683610ad0565b82106107a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079e90612c15565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61081b83838360405180602001604052806000815250610db6565b505050565b6060600061082d83610ad0565b9050600061083a84610ad0565b67ffffffffffffffff8111156108535761085261279e565b5b60405190808252806020026020018201604052801561088657816020015b60608152602001906001900390816108715790505b50905060008267ffffffffffffffff8111156108a5576108a461279e565b5b6040519080825280602002602001820160405280156108d35781602001602082028036833780820191505090505b50905060005b838110156109a1576108eb868261075b565b8282815181106108fe576108fd612c35565b5b60200260200101818152505061092d8282815181106109205761091f612c35565b5b60200260200101516115ae565b61095083838151811061094357610942612c35565b5b6020026020010151610ea2565b604051602001610961929190612ca0565b60405160208183030381529060405283828151811061098357610982612c35565b5b6020026020010181905250808061099990612cf3565b9150506108d9565b50819350505050919050565b60006109b76106ee565b82106109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef90612dae565b60405180910390fd5b60088281548110610a0c57610a0b612c35565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe90612e1a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890612eac565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b9061170f565b610b9a600061178d565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610bd5906129bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610c01906129bb565b8015610c4e5780601f10610c2357610100808354040283529160200191610c4e565b820191906000526020600020905b815481529060010190602001808311610c3157829003601f168201915b5050505050905090565b610c6a610c636111f1565b8383611853565b5050565b60606000603867ffffffffffffffff811115610c8d57610c8c61279e565b5b604051908082528060200260200182016040528015610cc057816020015b6060815260200190600190039081610cab5790505b5090506000600190505b60378111610dae5760011515600b600083815260200190815260200160002060009054906101000a900460ff1615151415610d5457610d08816115ae565b610d1182610ea2565b604051602001610d22929190612ef2565b604051602081830303815290604052828281518110610d4457610d43612c35565b5b6020026020010181905250610d9b565b610d5d816115ae565b604051602001610d6d9190612f4b565b604051602081830303815290604052828281518110610d8f57610d8e612c35565b5b60200260200101819052505b8080610da690612cf3565b915050610cca565b508091505090565b610dc7610dc16111f1565b836112b2565b610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90612b83565b60405180910390fd5b610e12848484846119c0565b50505050565b60018110158015610e2a575060378111155b610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090612fbd565b60405180910390fd5b610e733382611a1c565b6001600b600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6060610ead82611bf6565b610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee39061304f565b60405180910390fd5b600d610ef7836115ae565b604051602001610f0892919061314f565b6040516020818303038152906040529050919050565b600d8054610f2b906129bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610f57906129bb565b8015610fa45780601f10610f7957610100808354040283529160200191610fa4565b820191906000526020600020905b815481529060010190602001808311610f8757829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61104861170f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af906131f0565b60405180910390fd5b6110c18161178d565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061118f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061119f575061119e82611c62565b5b9050919050565b6111af81611bf6565b6111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590612e1a565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661126c83610a1e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112be83610a1e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061130057506112ff8185610fac565b5b8061133e57508373ffffffffffffffffffffffffffffffffffffffff1661132684610590565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661136782610a1e565b73ffffffffffffffffffffffffffffffffffffffff16146113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490613282565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490613314565b60405180910390fd5b611438838383611ccc565b6114436000826111f9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114939190613334565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114ea9190613368565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115a9838383611de0565b505050565b606060008214156115f6576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061170a565b600082905060005b6000821461162857808061161190612cf3565b915050600a8261162191906133ed565b91506115fe565b60008167ffffffffffffffff8111156116445761164361279e565b5b6040519080825280601f01601f1916602001820160405280156116765781602001600182028036833780820191505090505b5090505b600085146117035760018261168f9190613334565b9150600a8561169e919061341e565b60306116aa9190613368565b60f81b8183815181106116c0576116bf612c35565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856116fc91906133ed565b945061167a565b8093505050505b919050565b6117176111f1565b73ffffffffffffffffffffffffffffffffffffffff16611735610b9c565b73ffffffffffffffffffffffffffffffffffffffff161461178b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117829061349b565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990613507565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119b3919061234f565b60405180910390a3505050565b6119cb848484611347565b6119d784848484611de5565b611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d90613599565b60405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390613605565b60405180910390fd5b611a9581611bf6565b15611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90613671565b60405180910390fd5b611ae160008383611ccc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b319190613368565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611bf260008383611de0565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611cd7838383611f6d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d1a57611d1581611f72565b611d59565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d5857611d578382611fbb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d9c57611d9781612128565b611ddb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611dda57611dd982826121f9565b5b5b505050565b505050565b6000611e068473ffffffffffffffffffffffffffffffffffffffff16612278565b15611f60578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e2f6111f1565b8786866040518563ffffffff1660e01b8152600401611e5194939291906136e6565b6020604051808303816000875af1925050508015611e8d57506040513d601f19601f82011682018060405250810190611e8a9190613747565b60015b611f10573d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b50600081511415611f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eff90613599565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f65565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611fc884610ad0565b611fd29190613334565b90506000600760008481526020019081526020016000205490508181146120b7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061213c9190613334565b905060006009600084815260200190815260200160002054905060006008838154811061216c5761216b612c35565b5b90600052602060002001549050806008838154811061218e5761218d612c35565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806121dd576121dc613774565b5b6001900381819060005260206000200160009055905550505050565b600061220483610ad0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6122e4816122af565b81146122ef57600080fd5b50565b600081359050612301816122db565b92915050565b60006020828403121561231d5761231c6122a5565b5b600061232b848285016122f2565b91505092915050565b60008115159050919050565b61234981612334565b82525050565b60006020820190506123646000830184612340565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123a4578082015181840152602081019050612389565b838111156123b3576000848401525b50505050565b6000601f19601f8301169050919050565b60006123d58261236a565b6123df8185612375565b93506123ef818560208601612386565b6123f8816123b9565b840191505092915050565b6000602082019050818103600083015261241d81846123ca565b905092915050565b6000819050919050565b61243881612425565b811461244357600080fd5b50565b6000813590506124558161242f565b92915050565b600060208284031215612471576124706122a5565b5b600061247f84828501612446565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124b382612488565b9050919050565b6124c3816124a8565b82525050565b60006020820190506124de60008301846124ba565b92915050565b6124ed816124a8565b81146124f857600080fd5b50565b60008135905061250a816124e4565b92915050565b60008060408385031215612527576125266122a5565b5b6000612535858286016124fb565b925050602061254685828601612446565b9150509250929050565b61255981612425565b82525050565b60006020820190506125746000830184612550565b92915050565b600080600060608486031215612593576125926122a5565b5b60006125a1868287016124fb565b93505060206125b2868287016124fb565b92505060406125c386828701612446565b9150509250925092565b6000602082840312156125e3576125e26122a5565b5b60006125f1848285016124fb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006126428261236a565b61264c8185612626565b935061265c818560208601612386565b612665816123b9565b840191505092915050565b600061267c8383612637565b905092915050565b6000602082019050919050565b600061269c826125fa565b6126a68185612605565b9350836020820285016126b885612616565b8060005b858110156126f457848403895281516126d58582612670565b94506126e083612684565b925060208a019950506001810190506126bc565b50829750879550505050505092915050565b600060208201905081810360008301526127208184612691565b905092915050565b61273181612334565b811461273c57600080fd5b50565b60008135905061274e81612728565b92915050565b6000806040838503121561276b5761276a6122a5565b5b6000612779858286016124fb565b925050602061278a8582860161273f565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127d6826123b9565b810181811067ffffffffffffffff821117156127f5576127f461279e565b5b80604052505050565b600061280861229b565b905061281482826127cd565b919050565b600067ffffffffffffffff8211156128345761283361279e565b5b61283d826123b9565b9050602081019050919050565b82818337600083830152505050565b600061286c61286784612819565b6127fe565b90508281526020810184848401111561288857612887612799565b5b61289384828561284a565b509392505050565b600082601f8301126128b0576128af612794565b5b81356128c0848260208601612859565b91505092915050565b600080600080608085870312156128e3576128e26122a5565b5b60006128f1878288016124fb565b9450506020612902878288016124fb565b935050604061291387828801612446565b925050606085013567ffffffffffffffff811115612934576129336122aa565b5b6129408782880161289b565b91505092959194509250565b60008060408385031215612963576129626122a5565b5b6000612971858286016124fb565b9250506020612982858286016124fb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806129d357607f821691505b602082108114156129e7576129e661298c565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a49602183612375565b9150612a54826129ed565b604082019050919050565b60006020820190508181036000830152612a7881612a3c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000612adb603e83612375565b9150612ae682612a7f565b604082019050919050565b60006020820190508181036000830152612b0a81612ace565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612b6d602e83612375565b9150612b7882612b11565b604082019050919050565b60006020820190508181036000830152612b9c81612b60565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000612bff602b83612375565b9150612c0a82612ba3565b604082019050919050565b60006020820190508181036000830152612c2e81612bf2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b6000612c7a8261236a565b612c848185612c64565b9350612c94818560208601612386565b80840191505092915050565b6000612cac8285612c6f565b9150612cb88284612c6f565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612cfe82612425565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d3157612d30612cc4565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000612d98602c83612375565b9150612da382612d3c565b604082019050919050565b60006020820190508181036000830152612dc781612d8b565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000612e04601883612375565b9150612e0f82612dce565b602082019050919050565b60006020820190508181036000830152612e3381612df7565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000612e96602983612375565b9150612ea182612e3a565b604082019050919050565b60006020820190508181036000830152612ec581612e89565b9050919050565b7f202d204d696e746564202d200000000000000000000000000000000000000000815250565b6000612efe8285612c6f565b9150612f0982612ecc565b600c82019150612f198284612c6f565b91508190509392505050565b7f202d20417661696c61626c650000000000000000000000000000000000000000815250565b6000612f578284612c6f565b9150612f6282612f25565b600c8201915081905092915050565b7f4d696e74204944206d757374206265206265747765656e203120616e64203535600082015250565b6000612fa7602083612375565b9150612fb282612f71565b602082019050919050565b60006020820190508181036000830152612fd681612f9a565b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b6000613039603083612375565b915061304482612fdd565b604082019050919050565b600060208201905081810360008301526130688161302c565b9050919050565b60008190508160005260206000209050919050565b60008154613091816129bb565b61309b8186612c64565b945060018216600081146130b657600181146130c7576130fa565b60ff198316865281860193506130fa565b6130d08561306f565b60005b838110156130f2578154818901526001820191506020810190506130d3565b838801955050505b50505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613139600583612c64565b915061314482613103565b600582019050919050565b600061315b8285613084565b91506131678284612c6f565b91506131728261312c565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131da602683612375565b91506131e58261317e565b604082019050919050565b60006020820190508181036000830152613209816131cd565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061326c602583612375565b915061327782613210565b604082019050919050565b6000602082019050818103600083015261329b8161325f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132fe602483612375565b9150613309826132a2565b604082019050919050565b6000602082019050818103600083015261332d816132f1565b9050919050565b600061333f82612425565b915061334a83612425565b92508282101561335d5761335c612cc4565b5b828203905092915050565b600061337382612425565b915061337e83612425565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133b3576133b2612cc4565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133f882612425565b915061340383612425565b925082613413576134126133be565b5b828204905092915050565b600061342982612425565b915061343483612425565b925082613444576134436133be565b5b828206905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613485602083612375565b91506134908261344f565b602082019050919050565b600060208201905081810360008301526134b481613478565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006134f1601983612375565b91506134fc826134bb565b602082019050919050565b60006020820190508181036000830152613520816134e4565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613583603283612375565b915061358e82613527565b604082019050919050565b600060208201905081810360008301526135b281613576565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006135ef602083612375565b91506135fa826135b9565b602082019050919050565b6000602082019050818103600083015261361e816135e2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061365b601c83612375565b915061366682613625565b602082019050919050565b6000602082019050818103600083015261368a8161364e565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006136b882613691565b6136c2818561369c565b93506136d2818560208601612386565b6136db816123b9565b840191505092915050565b60006080820190506136fb60008301876124ba565b61370860208301866124ba565b6137156040830185612550565b818103606083015261372781846136ad565b905095945050505050565b600081519050613741816122db565b92915050565b60006020828403121561375d5761375c6122a5565b5b600061376b84828501613732565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122061325a6b58ecf007d910baeb8b557877dfe4ddd8aee28f782bf485dc03a26c4c64736f6c634300080c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000017546f6e692053616e6368657a20436f6c6c656374696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000064f646974746f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d50343643445273676268566268343175396b736e6245566d553175393359705453333656566e6651616443532f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Toni Sanchez Collection
Arg [1] : _symbol (string): Oditto
Arg [2] : _baseTokenURI (string): ipfs://QmP46CDRsgbhVbh41u9ksnbEVmU1u93YpTS36VVnfQadCS/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [4] : 546f6e692053616e6368657a20436f6c6c656374696f6e000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 4f646974746f0000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d50343643445273676268566268343175396b736e624556
Arg [9] : 6d553175393359705453333656566e6651616443532f00000000000000000000


Deployed Bytecode Sourcemap

47595:2027:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41394:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28128:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29641:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29158:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42034:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30341:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41702:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30748:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48557:555;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42224:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27839:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27570:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6657:103;;;:::i;:::-;;6009:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28297:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29884:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49118:501;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31004:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47964:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48280:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47769:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30110:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6915:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41394:224;41496:4;41535:35;41520:50;;;:11;:50;;;;:90;;;;41574:36;41598:11;41574:23;:36::i;:::-;41520:90;41513:97;;41394:224;;;:::o;28128:100::-;28182:13;28215:5;28208:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28128:100;:::o;29641:171::-;29717:7;29737:23;29752:7;29737:14;:23::i;:::-;29780:15;:24;29796:7;29780:24;;;;;;;;;;;;;;;;;;;;;29773:31;;29641:171;;;:::o;29158:417::-;29239:13;29255:23;29270:7;29255:14;:23::i;:::-;29239:39;;29303:5;29297:11;;:2;:11;;;;29289:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29397:5;29381:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29406:37;29423:5;29430:12;:10;:12::i;:::-;29406:16;:37::i;:::-;29381:62;29359:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;29546:21;29555:2;29559:7;29546:8;:21::i;:::-;29228:347;29158:417;;:::o;42034:113::-;42095:7;42122:10;:17;;;;42115:24;;42034:113;:::o;30341:336::-;30536:41;30555:12;:10;:12::i;:::-;30569:7;30536:18;:41::i;:::-;30528:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30641:28;30651:4;30657:2;30661:7;30641:9;:28::i;:::-;30341:336;;;:::o;41702:256::-;41799:7;41835:23;41852:5;41835:16;:23::i;:::-;41827:5;:31;41819:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41924:12;:19;41937:5;41924:19;;;;;;;;;;;;;;;:26;41944:5;41924:26;;;;;;;;;;;;41917:33;;41702:256;;;;:::o;30748:185::-;30886:39;30903:4;30909:2;30913:7;30886:39;;;;;;;;;;;;:16;:39::i;:::-;30748:185;;;:::o;48557:555::-;48617:15;48658:23;48684:17;48694:6;48684:9;:17::i;:::-;48658:43;;48717:20;48753:17;48763:6;48753:9;:17::i;:::-;48740:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48717:54;;48786:25;48828:15;48814:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48786:58;;48864:9;48859:216;48879:15;48875:1;:19;48859:216;;;48933:30;48953:6;48961:1;48933:19;:30::i;:::-;48919:8;48928:1;48919:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49006:29;49023:8;49032:1;49023:11;;;;;;;;:::i;:::-;;;;;;;;49006:16;:29::i;:::-;49037:21;49046:8;49055:1;49046:11;;;;;;;;:::i;:::-;;;;;;;;49037:8;:21::i;:::-;48992:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48982:4;48987:1;48982:7;;;;;;;;:::i;:::-;;;;;;;:77;;;;48896:3;;;;;:::i;:::-;;;;48859:216;;;;49096:4;49089:11;;;;;48557:555;;;:::o;42224:233::-;42299:7;42335:30;:28;:30::i;:::-;42327:5;:38;42319:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;42432:10;42443:5;42432:17;;;;;;;;:::i;:::-;;;;;;;;;;42425:24;;42224:233;;;:::o;27839:222::-;27911:7;27931:13;27947:7;:16;27955:7;27947:16;;;;;;;;;;;;;;;;;;;;;27931:32;;27999:1;27982:19;;:5;:19;;;;27974:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28048:5;28041:12;;;27839:222;;;:::o;27570:207::-;27642:7;27687:1;27670:19;;:5;:19;;;;27662:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27753:9;:16;27763:5;27753:16;;;;;;;;;;;;;;;;27746:23;;27570:207;;;:::o;6657:103::-;5895:13;:11;:13::i;:::-;6722:30:::1;6749:1;6722:18;:30::i;:::-;6657:103::o:0;6009:87::-;6055:7;6082:6;;;;;;;;;;;6075:13;;6009:87;:::o;28297:104::-;28353:13;28386:7;28379:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28297:104;:::o;29884:155::-;29979:52;29998:12;:10;:12::i;:::-;30012:8;30022;29979:18;:52::i;:::-;29884:155;;:::o;49118:501::-;49157:15;49184:30;49230:2;49217:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49184:49;;49248:6;49257:1;49248:10;;49244:336;49265:2;49260:1;:7;49244:336;;49310:4;49295:19;;:8;:11;49304:1;49295:11;;;;;;;;;;;;;;;;;;;;;:19;;;49292:277;;;49368:19;49385:1;49368:16;:19::i;:::-;49406:11;49415:1;49406:8;:11::i;:::-;49354:64;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49334:14;49349:1;49334:17;;;;;;;;:::i;:::-;;;;;;;:84;;;;49292:277;;;49514:19;49531:1;49514:16;:19::i;:::-;49500:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;49480:14;49495:1;49480:17;;;;;;;;:::i;:::-;;;;;;;:69;;;;49292:277;49269:3;;;;;:::i;:::-;;;;49244:336;;;;49597:14;49590:21;;;49118:501;:::o;31004:323::-;31178:41;31197:12;:10;:12::i;:::-;31211:7;31178:18;:41::i;:::-;31170:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;31281:38;31295:4;31301:2;31305:7;31314:4;31281:13;:38::i;:::-;31004:323;;;;:::o;47964:191::-;48026:1;48017:6;:10;;:26;;;;;48041:2;48031:6;:12;;48017:26;48009:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48088:25;48094:10;48106:6;48088:5;:25::i;:::-;48143:4;48124:8;:16;48133:6;48124:16;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;47964:191;:::o;48280:269::-;48345:13;48380:16;48388:7;48380;:16::i;:::-;48371:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;48492:12;48506:25;48523:7;48506:16;:25::i;:::-;48475:65;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48461:80;;48280:269;;;:::o;47769:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30110:164::-;30207:4;30231:18;:25;30250:5;30231:25;;;;;;;;;;;;;;;:35;30257:8;30231:35;;;;;;;;;;;;;;;;;;;;;;;;;30224:42;;30110:164;;;;:::o;6915:201::-;5895:13;:11;:13::i;:::-;7024:1:::1;7004:22;;:8;:22;;;;6996:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7080:28;7099:8;7080:18;:28::i;:::-;6915:201:::0;:::o;27201:305::-;27303:4;27355:25;27340:40;;;:11;:40;;;;:105;;;;27412:33;27397:48;;;:11;:48;;;;27340:105;:158;;;;27462:36;27486:11;27462:23;:36::i;:::-;27340:158;27320:178;;27201:305;;;:::o;37616:135::-;37698:16;37706:7;37698;:16::i;:::-;37690:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37616:135;:::o;4560:98::-;4613:7;4640:10;4633:17;;4560:98;:::o;36895:174::-;36997:2;36970:15;:24;36986:7;36970:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37053:7;37049:2;37015:46;;37024:23;37039:7;37024:14;:23::i;:::-;37015:46;;;;;;;;;;;;36895:174;;:::o;33128:264::-;33221:4;33238:13;33254:23;33269:7;33254:14;:23::i;:::-;33238:39;;33307:5;33296:16;;:7;:16;;;:52;;;;33316:32;33333:5;33340:7;33316:16;:32::i;:::-;33296:52;:87;;;;33376:7;33352:31;;:20;33364:7;33352:11;:20::i;:::-;:31;;;33296:87;33288:96;;;33128:264;;;;:::o;36151:625::-;36310:4;36283:31;;:23;36298:7;36283:14;:23::i;:::-;:31;;;36275:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36389:1;36375:16;;:2;:16;;;;36367:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36445:39;36466:4;36472:2;36476:7;36445:20;:39::i;:::-;36549:29;36566:1;36570:7;36549:8;:29::i;:::-;36610:1;36591:9;:15;36601:4;36591:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36639:1;36622:9;:13;36632:2;36622:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36670:2;36651:7;:16;36659:7;36651:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36709:7;36705:2;36690:27;;36699:4;36690:27;;;;;;;;;;;;36730:38;36750:4;36756:2;36760:7;36730:19;:38::i;:::-;36151:625;;;:::o;1814:723::-;1870:13;2100:1;2091:5;:10;2087:53;;;2118:10;;;;;;;;;;;;;;;;;;;;;2087:53;2150:12;2165:5;2150:20;;2181:14;2206:78;2221:1;2213:4;:9;2206:78;;2239:8;;;;;:::i;:::-;;;;2270:2;2262:10;;;;;:::i;:::-;;;2206:78;;;2294:19;2326:6;2316:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2294:39;;2344:154;2360:1;2351:5;:10;2344:154;;2388:1;2378:11;;;;;:::i;:::-;;;2455:2;2447:5;:10;;;;:::i;:::-;2434:2;:24;;;;:::i;:::-;2421:39;;2404:6;2411;2404:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2484:2;2475:11;;;;;:::i;:::-;;;2344:154;;;2522:6;2508:21;;;;;1814:723;;;;:::o;6174:132::-;6249:12;:10;:12::i;:::-;6238:23;;:7;:5;:7::i;:::-;:23;;;6230:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6174:132::o;7276:191::-;7350:16;7369:6;;;;;;;;;;;7350:25;;7395:8;7386:6;;:17;;;;;;;;;;;;;;;;;;7450:8;7419:40;;7440:8;7419:40;;;;;;;;;;;;7339:128;7276:191;:::o;37212:315::-;37367:8;37358:17;;:5;:17;;;;37350:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37454:8;37416:18;:25;37435:5;37416:25;;;;;;;;;;;;;;;:35;37442:8;37416:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37500:8;37478:41;;37493:5;37478:41;;;37510:8;37478:41;;;;;;:::i;:::-;;;;;;;;37212:315;;;:::o;32208:313::-;32364:28;32374:4;32380:2;32384:7;32364:9;:28::i;:::-;32411:47;32434:4;32440:2;32444:7;32453:4;32411:22;:47::i;:::-;32403:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32208:313;;;;:::o;34726:439::-;34820:1;34806:16;;:2;:16;;;;34798:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34879:16;34887:7;34879;:16::i;:::-;34878:17;34870:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34941:45;34970:1;34974:2;34978:7;34941:20;:45::i;:::-;35016:1;34999:9;:13;35009:2;34999:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35047:2;35028:7;:16;35036:7;35028:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35092:7;35088:2;35067:33;;35084:1;35067:33;;;;;;;;;;;;35113:44;35141:1;35145:2;35149:7;35113:19;:44::i;:::-;34726:439;;:::o;32834:127::-;32899:4;32951:1;32923:30;;:7;:16;32931:7;32923:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32916:37;;32834:127;;;:::o;18863:157::-;18948:4;18987:25;18972:40;;;:11;:40;;;;18965:47;;18863:157;;;:::o;43070:589::-;43214:45;43241:4;43247:2;43251:7;43214:26;:45::i;:::-;43292:1;43276:18;;:4;:18;;;43272:187;;;43311:40;43343:7;43311:31;:40::i;:::-;43272:187;;;43381:2;43373:10;;:4;:10;;;43369:90;;43400:47;43433:4;43439:7;43400:32;:47::i;:::-;43369:90;43272:187;43487:1;43473:16;;:2;:16;;;43469:183;;;43506:45;43543:7;43506:36;:45::i;:::-;43469:183;;;43579:4;43573:10;;:2;:10;;;43569:83;;43600:40;43628:2;43632:7;43600:27;:40::i;:::-;43569:83;43469:183;43070:589;;;:::o;40251:125::-;;;;:::o;38315:853::-;38469:4;38490:15;:2;:13;;;:15::i;:::-;38486:675;;;38542:2;38526:36;;;38563:12;:10;:12::i;:::-;38577:4;38583:7;38592:4;38526:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38522:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38784:1;38767:6;:13;:18;38763:328;;;38810:60;;;;;;;;;;:::i;:::-;;;;;;;;38763:328;39041:6;39035:13;39026:6;39022:2;39018:15;39011:38;38522:584;38658:41;;;38648:51;;;:6;:51;;;;38641:58;;;;;38486:675;39145:4;39138:11;;38315:853;;;;;;;:::o;39740:126::-;;;;:::o;44382:164::-;44486:10;:17;;;;44459:15;:24;44475:7;44459:24;;;;;;;;;;;:44;;;;44514:10;44530:7;44514:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44382:164;:::o;45173:988::-;45439:22;45489:1;45464:22;45481:4;45464:16;:22::i;:::-;:26;;;;:::i;:::-;45439:51;;45501:18;45522:17;:26;45540:7;45522:26;;;;;;;;;;;;45501:47;;45669:14;45655:10;:28;45651:328;;45700:19;45722:12;:18;45735:4;45722:18;;;;;;;;;;;;;;;:34;45741:14;45722:34;;;;;;;;;;;;45700:56;;45806:11;45773:12;:18;45786:4;45773:18;;;;;;;;;;;;;;;:30;45792:10;45773:30;;;;;;;;;;;:44;;;;45923:10;45890:17;:30;45908:11;45890:30;;;;;;;;;;;:43;;;;45685:294;45651:328;46075:17;:26;46093:7;46075:26;;;;;;;;;;;46068:33;;;46119:12;:18;46132:4;46119:18;;;;;;;;;;;;;;;:34;46138:14;46119:34;;;;;;;;;;;46112:41;;;45254:907;;45173:988;;:::o;46456:1079::-;46709:22;46754:1;46734:10;:17;;;;:21;;;;:::i;:::-;46709:46;;46766:18;46787:15;:24;46803:7;46787:24;;;;;;;;;;;;46766:45;;47138:19;47160:10;47171:14;47160:26;;;;;;;;:::i;:::-;;;;;;;;;;47138:48;;47224:11;47199:10;47210;47199:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;47335:10;47304:15;:28;47320:11;47304:28;;;;;;;;;;;:41;;;;47476:15;:24;47492:7;47476:24;;;;;;;;;;;47469:31;;;47511:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46527:1008;;;46456:1079;:::o;43960:221::-;44045:14;44062:20;44079:2;44062:16;:20::i;:::-;44045:37;;44120:7;44093:12;:16;44106:2;44093:16;;;;;;;;;;;;;;;:24;44110:6;44093:24;;;;;;;;;;;:34;;;;44167:6;44138:17;:26;44156:7;44138:26;;;;;;;;;;;:35;;;;44034:147;43960:221;;:::o;8707:326::-;8767:4;9024:1;9002:7;:19;;;:23;8995:30;;8707:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:124::-;6327:6;6361:5;6355:12;6345:22;;6250:124;;;:::o;6380:194::-;6489:11;6523:6;6518:3;6511:19;6563:4;6558:3;6554:14;6539:29;;6380:194;;;;:::o;6580:142::-;6657:4;6680:3;6672:11;;6710:4;6705:3;6701:14;6693:22;;6580:142;;;:::o;6728:159::-;6802:11;6836:6;6831:3;6824:19;6876:4;6871:3;6867:14;6852:29;;6728:159;;;;:::o;6893:344::-;6971:3;6999:39;7032:5;6999:39;:::i;:::-;7054:61;7108:6;7103:3;7054:61;:::i;:::-;7047:68;;7124:52;7169:6;7164:3;7157:4;7150:5;7146:16;7124:52;:::i;:::-;7201:29;7223:6;7201:29;:::i;:::-;7196:3;7192:39;7185:46;;6975:262;6893:344;;;;:::o;7243:196::-;7332:10;7367:66;7429:3;7421:6;7367:66;:::i;:::-;7353:80;;7243:196;;;;:::o;7445:123::-;7525:4;7557;7552:3;7548:14;7540:22;;7445:123;;;:::o;7602:991::-;7741:3;7770:64;7828:5;7770:64;:::i;:::-;7850:96;7939:6;7934:3;7850:96;:::i;:::-;7843:103;;7972:3;8017:4;8009:6;8005:17;8000:3;7996:27;8047:66;8107:5;8047:66;:::i;:::-;8136:7;8167:1;8152:396;8177:6;8174:1;8171:13;8152:396;;;8248:9;8242:4;8238:20;8233:3;8226:33;8299:6;8293:13;8327:84;8406:4;8391:13;8327:84;:::i;:::-;8319:92;;8434:70;8497:6;8434:70;:::i;:::-;8424:80;;8533:4;8528:3;8524:14;8517:21;;8212:336;8199:1;8196;8192:9;8187:14;;8152:396;;;8156:14;8564:4;8557:11;;8584:3;8577:10;;7746:847;;;;;7602:991;;;;:::o;8599:413::-;8762:4;8800:2;8789:9;8785:18;8777:26;;8849:9;8843:4;8839:20;8835:1;8824:9;8820:17;8813:47;8877:128;9000:4;8991:6;8877:128;:::i;:::-;8869:136;;8599:413;;;;:::o;9018:116::-;9088:21;9103:5;9088:21;:::i;:::-;9081:5;9078:32;9068:60;;9124:1;9121;9114:12;9068:60;9018:116;:::o;9140:133::-;9183:5;9221:6;9208:20;9199:29;;9237:30;9261:5;9237:30;:::i;:::-;9140:133;;;;:::o;9279:468::-;9344:6;9352;9401:2;9389:9;9380:7;9376:23;9372:32;9369:119;;;9407:79;;:::i;:::-;9369:119;9527:1;9552:53;9597:7;9588:6;9577:9;9573:22;9552:53;:::i;:::-;9542:63;;9498:117;9654:2;9680:50;9722:7;9713:6;9702:9;9698:22;9680:50;:::i;:::-;9670:60;;9625:115;9279:468;;;;;:::o;9753:117::-;9862:1;9859;9852:12;9876:117;9985:1;9982;9975:12;9999:180;10047:77;10044:1;10037:88;10144:4;10141:1;10134:15;10168:4;10165:1;10158:15;10185:281;10268:27;10290:4;10268:27;:::i;:::-;10260:6;10256:40;10398:6;10386:10;10383:22;10362:18;10350:10;10347:34;10344:62;10341:88;;;10409:18;;:::i;:::-;10341:88;10449:10;10445:2;10438:22;10228:238;10185:281;;:::o;10472:129::-;10506:6;10533:20;;:::i;:::-;10523:30;;10562:33;10590:4;10582:6;10562:33;:::i;:::-;10472:129;;;:::o;10607:307::-;10668:4;10758:18;10750:6;10747:30;10744:56;;;10780:18;;:::i;:::-;10744:56;10818:29;10840:6;10818:29;:::i;:::-;10810:37;;10902:4;10896;10892:15;10884:23;;10607:307;;;:::o;10920:154::-;11004:6;10999:3;10994;10981:30;11066:1;11057:6;11052:3;11048:16;11041:27;10920:154;;;:::o;11080:410::-;11157:5;11182:65;11198:48;11239:6;11198:48;:::i;:::-;11182:65;:::i;:::-;11173:74;;11270:6;11263:5;11256:21;11308:4;11301:5;11297:16;11346:3;11337:6;11332:3;11328:16;11325:25;11322:112;;;11353:79;;:::i;:::-;11322:112;11443:41;11477:6;11472:3;11467;11443:41;:::i;:::-;11163:327;11080:410;;;;;:::o;11509:338::-;11564:5;11613:3;11606:4;11598:6;11594:17;11590:27;11580:122;;11621:79;;:::i;:::-;11580:122;11738:6;11725:20;11763:78;11837:3;11829:6;11822:4;11814:6;11810:17;11763:78;:::i;:::-;11754:87;;11570:277;11509:338;;;;:::o;11853:943::-;11948:6;11956;11964;11972;12021:3;12009:9;12000:7;11996:23;11992:33;11989:120;;;12028:79;;:::i;:::-;11989:120;12148:1;12173:53;12218:7;12209:6;12198:9;12194:22;12173:53;:::i;:::-;12163:63;;12119:117;12275:2;12301:53;12346:7;12337:6;12326:9;12322:22;12301:53;:::i;:::-;12291:63;;12246:118;12403:2;12429:53;12474:7;12465:6;12454:9;12450:22;12429:53;:::i;:::-;12419:63;;12374:118;12559:2;12548:9;12544:18;12531:32;12590:18;12582:6;12579:30;12576:117;;;12612:79;;:::i;:::-;12576:117;12717:62;12771:7;12762:6;12751:9;12747:22;12717:62;:::i;:::-;12707:72;;12502:287;11853:943;;;;;;;:::o;12802:474::-;12870:6;12878;12927:2;12915:9;12906:7;12902:23;12898:32;12895:119;;;12933:79;;:::i;:::-;12895:119;13053:1;13078:53;13123:7;13114:6;13103:9;13099:22;13078:53;:::i;:::-;13068:63;;13024:117;13180:2;13206:53;13251:7;13242:6;13231:9;13227:22;13206:53;:::i;:::-;13196:63;;13151:118;12802:474;;;;;:::o;13282:180::-;13330:77;13327:1;13320:88;13427:4;13424:1;13417:15;13451:4;13448:1;13441:15;13468:320;13512:6;13549:1;13543:4;13539:12;13529:22;;13596:1;13590:4;13586:12;13617:18;13607:81;;13673:4;13665:6;13661:17;13651:27;;13607:81;13735:2;13727:6;13724:14;13704:18;13701:38;13698:84;;;13754:18;;:::i;:::-;13698:84;13519:269;13468:320;;;:::o;13794:220::-;13934:34;13930:1;13922:6;13918:14;13911:58;14003:3;13998:2;13990:6;13986:15;13979:28;13794:220;:::o;14020:366::-;14162:3;14183:67;14247:2;14242:3;14183:67;:::i;:::-;14176:74;;14259:93;14348:3;14259:93;:::i;:::-;14377:2;14372:3;14368:12;14361:19;;14020:366;;;:::o;14392:419::-;14558:4;14596:2;14585:9;14581:18;14573:26;;14645:9;14639:4;14635:20;14631:1;14620:9;14616:17;14609:47;14673:131;14799:4;14673:131;:::i;:::-;14665:139;;14392:419;;;:::o;14817:249::-;14957:34;14953:1;14945:6;14941:14;14934:58;15026:32;15021:2;15013:6;15009:15;15002:57;14817:249;:::o;15072:366::-;15214:3;15235:67;15299:2;15294:3;15235:67;:::i;:::-;15228:74;;15311:93;15400:3;15311:93;:::i;:::-;15429:2;15424:3;15420:12;15413:19;;15072:366;;;:::o;15444:419::-;15610:4;15648:2;15637:9;15633:18;15625:26;;15697:9;15691:4;15687:20;15683:1;15672:9;15668:17;15661:47;15725:131;15851:4;15725:131;:::i;:::-;15717:139;;15444:419;;;:::o;15869:233::-;16009:34;16005:1;15997:6;15993:14;15986:58;16078:16;16073:2;16065:6;16061:15;16054:41;15869:233;:::o;16108:366::-;16250:3;16271:67;16335:2;16330:3;16271:67;:::i;:::-;16264:74;;16347:93;16436:3;16347:93;:::i;:::-;16465:2;16460:3;16456:12;16449:19;;16108:366;;;:::o;16480:419::-;16646:4;16684:2;16673:9;16669:18;16661:26;;16733:9;16727:4;16723:20;16719:1;16708:9;16704:17;16697:47;16761:131;16887:4;16761:131;:::i;:::-;16753:139;;16480:419;;;:::o;16905:230::-;17045:34;17041:1;17033:6;17029:14;17022:58;17114:13;17109:2;17101:6;17097:15;17090:38;16905:230;:::o;17141:366::-;17283:3;17304:67;17368:2;17363:3;17304:67;:::i;:::-;17297:74;;17380:93;17469:3;17380:93;:::i;:::-;17498:2;17493:3;17489:12;17482:19;;17141:366;;;:::o;17513:419::-;17679:4;17717:2;17706:9;17702:18;17694:26;;17766:9;17760:4;17756:20;17752:1;17741:9;17737:17;17730:47;17794:131;17920:4;17794:131;:::i;:::-;17786:139;;17513:419;;;:::o;17938:180::-;17986:77;17983:1;17976:88;18083:4;18080:1;18073:15;18107:4;18104:1;18097:15;18124:148;18226:11;18263:3;18248:18;;18124:148;;;;:::o;18278:377::-;18384:3;18412:39;18445:5;18412:39;:::i;:::-;18467:89;18549:6;18544:3;18467:89;:::i;:::-;18460:96;;18565:52;18610:6;18605:3;18598:4;18591:5;18587:16;18565:52;:::i;:::-;18642:6;18637:3;18633:16;18626:23;;18388:267;18278:377;;;;:::o;18661:435::-;18841:3;18863:95;18954:3;18945:6;18863:95;:::i;:::-;18856:102;;18975:95;19066:3;19057:6;18975:95;:::i;:::-;18968:102;;19087:3;19080:10;;18661:435;;;;;:::o;19102:180::-;19150:77;19147:1;19140:88;19247:4;19244:1;19237:15;19271:4;19268:1;19261:15;19288:233;19327:3;19350:24;19368:5;19350:24;:::i;:::-;19341:33;;19396:66;19389:5;19386:77;19383:103;;;19466:18;;:::i;:::-;19383:103;19513:1;19506:5;19502:13;19495:20;;19288:233;;;:::o;19527:231::-;19667:34;19663:1;19655:6;19651:14;19644:58;19736:14;19731:2;19723:6;19719:15;19712:39;19527:231;:::o;19764:366::-;19906:3;19927:67;19991:2;19986:3;19927:67;:::i;:::-;19920:74;;20003:93;20092:3;20003:93;:::i;:::-;20121:2;20116:3;20112:12;20105:19;;19764:366;;;:::o;20136:419::-;20302:4;20340:2;20329:9;20325:18;20317:26;;20389:9;20383:4;20379:20;20375:1;20364:9;20360:17;20353:47;20417:131;20543:4;20417:131;:::i;:::-;20409:139;;20136:419;;;:::o;20561:174::-;20701:26;20697:1;20689:6;20685:14;20678:50;20561:174;:::o;20741:366::-;20883:3;20904:67;20968:2;20963:3;20904:67;:::i;:::-;20897:74;;20980:93;21069:3;20980:93;:::i;:::-;21098:2;21093:3;21089:12;21082:19;;20741:366;;;:::o;21113:419::-;21279:4;21317:2;21306:9;21302:18;21294:26;;21366:9;21360:4;21356:20;21352:1;21341:9;21337:17;21330:47;21394:131;21520:4;21394:131;:::i;:::-;21386:139;;21113:419;;;:::o;21538:228::-;21678:34;21674:1;21666:6;21662:14;21655:58;21747:11;21742:2;21734:6;21730:15;21723:36;21538:228;:::o;21772:366::-;21914:3;21935:67;21999:2;21994:3;21935:67;:::i;:::-;21928:74;;22011:93;22100:3;22011:93;:::i;:::-;22129:2;22124:3;22120:12;22113:19;;21772:366;;;:::o;22144:419::-;22310:4;22348:2;22337:9;22333:18;22325:26;;22397:9;22391:4;22387:20;22383:1;22372:9;22368:17;22361:47;22425:131;22551:4;22425:131;:::i;:::-;22417:139;;22144:419;;;:::o;22569:190::-;22738:14;22733:3;22726:27;22569:190;:::o;22765:702::-;23036:3;23058:95;23149:3;23140:6;23058:95;:::i;:::-;23051:102;;23163:138;23297:3;23163:138;:::i;:::-;23326:2;23321:3;23317:12;23310:19;;23346:95;23437:3;23428:6;23346:95;:::i;:::-;23339:102;;23458:3;23451:10;;22765:702;;;;;:::o;23473:190::-;23642:14;23637:3;23630:27;23473:190;:::o;23669:542::-;23892:3;23914:95;24005:3;23996:6;23914:95;:::i;:::-;23907:102;;24019:138;24153:3;24019:138;:::i;:::-;24182:2;24177:3;24173:12;24166:19;;24202:3;24195:10;;23669:542;;;;:::o;24217:182::-;24357:34;24353:1;24345:6;24341:14;24334:58;24217:182;:::o;24405:366::-;24547:3;24568:67;24632:2;24627:3;24568:67;:::i;:::-;24561:74;;24644:93;24733:3;24644:93;:::i;:::-;24762:2;24757:3;24753:12;24746:19;;24405:366;;;:::o;24777:419::-;24943:4;24981:2;24970:9;24966:18;24958:26;;25030:9;25024:4;25020:20;25016:1;25005:9;25001:17;24994:47;25058:131;25184:4;25058:131;:::i;:::-;25050:139;;24777:419;;;:::o;25202:235::-;25342:34;25338:1;25330:6;25326:14;25319:58;25411:18;25406:2;25398:6;25394:15;25387:43;25202:235;:::o;25443:366::-;25585:3;25606:67;25670:2;25665:3;25606:67;:::i;:::-;25599:74;;25682:93;25771:3;25682:93;:::i;:::-;25800:2;25795:3;25791:12;25784:19;;25443:366;;;:::o;25815:419::-;25981:4;26019:2;26008:9;26004:18;25996:26;;26068:9;26062:4;26058:20;26054:1;26043:9;26039:17;26032:47;26096:131;26222:4;26096:131;:::i;:::-;26088:139;;25815:419;;;:::o;26240:141::-;26289:4;26312:3;26304:11;;26335:3;26332:1;26325:14;26369:4;26366:1;26356:18;26348:26;;26240:141;;;:::o;26411:845::-;26514:3;26551:5;26545:12;26580:36;26606:9;26580:36;:::i;:::-;26632:89;26714:6;26709:3;26632:89;:::i;:::-;26625:96;;26752:1;26741:9;26737:17;26768:1;26763:137;;;;26914:1;26909:341;;;;26730:520;;26763:137;26847:4;26843:9;26832;26828:25;26823:3;26816:38;26883:6;26878:3;26874:16;26867:23;;26763:137;;26909:341;26976:38;27008:5;26976:38;:::i;:::-;27036:1;27050:154;27064:6;27061:1;27058:13;27050:154;;;27138:7;27132:14;27128:1;27123:3;27119:11;27112:35;27188:1;27179:7;27175:15;27164:26;;27086:4;27083:1;27079:12;27074:17;;27050:154;;;27233:6;27228:3;27224:16;27217:23;;26916:334;;26730:520;;26518:738;;26411:845;;;;:::o;27262:155::-;27402:7;27398:1;27390:6;27386:14;27379:31;27262:155;:::o;27423:400::-;27583:3;27604:84;27686:1;27681:3;27604:84;:::i;:::-;27597:91;;27697:93;27786:3;27697:93;:::i;:::-;27815:1;27810:3;27806:11;27799:18;;27423:400;;;:::o;27829:695::-;28107:3;28129:92;28217:3;28208:6;28129:92;:::i;:::-;28122:99;;28238:95;28329:3;28320:6;28238:95;:::i;:::-;28231:102;;28350:148;28494:3;28350:148;:::i;:::-;28343:155;;28515:3;28508:10;;27829:695;;;;;:::o;28530:225::-;28670:34;28666:1;28658:6;28654:14;28647:58;28739:8;28734:2;28726:6;28722:15;28715:33;28530:225;:::o;28761:366::-;28903:3;28924:67;28988:2;28983:3;28924:67;:::i;:::-;28917:74;;29000:93;29089:3;29000:93;:::i;:::-;29118:2;29113:3;29109:12;29102:19;;28761:366;;;:::o;29133:419::-;29299:4;29337:2;29326:9;29322:18;29314:26;;29386:9;29380:4;29376:20;29372:1;29361:9;29357:17;29350:47;29414:131;29540:4;29414:131;:::i;:::-;29406:139;;29133:419;;;:::o;29558:224::-;29698:34;29694:1;29686:6;29682:14;29675:58;29767:7;29762:2;29754:6;29750:15;29743:32;29558:224;:::o;29788:366::-;29930:3;29951:67;30015:2;30010:3;29951:67;:::i;:::-;29944:74;;30027:93;30116:3;30027:93;:::i;:::-;30145:2;30140:3;30136:12;30129:19;;29788:366;;;:::o;30160:419::-;30326:4;30364:2;30353:9;30349:18;30341:26;;30413:9;30407:4;30403:20;30399:1;30388:9;30384:17;30377:47;30441:131;30567:4;30441:131;:::i;:::-;30433:139;;30160:419;;;:::o;30585:223::-;30725:34;30721:1;30713:6;30709:14;30702:58;30794:6;30789:2;30781:6;30777:15;30770:31;30585:223;:::o;30814:366::-;30956:3;30977:67;31041:2;31036:3;30977:67;:::i;:::-;30970:74;;31053:93;31142:3;31053:93;:::i;:::-;31171:2;31166:3;31162:12;31155:19;;30814:366;;;:::o;31186:419::-;31352:4;31390:2;31379:9;31375:18;31367:26;;31439:9;31433:4;31429:20;31425:1;31414:9;31410:17;31403:47;31467:131;31593:4;31467:131;:::i;:::-;31459:139;;31186:419;;;:::o;31611:191::-;31651:4;31671:20;31689:1;31671:20;:::i;:::-;31666:25;;31705:20;31723:1;31705:20;:::i;:::-;31700:25;;31744:1;31741;31738:8;31735:34;;;31749:18;;:::i;:::-;31735:34;31794:1;31791;31787:9;31779:17;;31611:191;;;;:::o;31808:305::-;31848:3;31867:20;31885:1;31867:20;:::i;:::-;31862:25;;31901:20;31919:1;31901:20;:::i;:::-;31896:25;;32055:1;31987:66;31983:74;31980:1;31977:81;31974:107;;;32061:18;;:::i;:::-;31974:107;32105:1;32102;32098:9;32091:16;;31808:305;;;;:::o;32119:180::-;32167:77;32164:1;32157:88;32264:4;32261:1;32254:15;32288:4;32285:1;32278:15;32305:185;32345:1;32362:20;32380:1;32362:20;:::i;:::-;32357:25;;32396:20;32414:1;32396:20;:::i;:::-;32391:25;;32435:1;32425:35;;32440:18;;:::i;:::-;32425:35;32482:1;32479;32475:9;32470:14;;32305:185;;;;:::o;32496:176::-;32528:1;32545:20;32563:1;32545:20;:::i;:::-;32540:25;;32579:20;32597:1;32579:20;:::i;:::-;32574:25;;32618:1;32608:35;;32623:18;;:::i;:::-;32608:35;32664:1;32661;32657:9;32652:14;;32496:176;;;;:::o;32678:182::-;32818:34;32814:1;32806:6;32802:14;32795:58;32678:182;:::o;32866:366::-;33008:3;33029:67;33093:2;33088:3;33029:67;:::i;:::-;33022:74;;33105:93;33194:3;33105:93;:::i;:::-;33223:2;33218:3;33214:12;33207:19;;32866:366;;;:::o;33238:419::-;33404:4;33442:2;33431:9;33427:18;33419:26;;33491:9;33485:4;33481:20;33477:1;33466:9;33462:17;33455:47;33519:131;33645:4;33519:131;:::i;:::-;33511:139;;33238:419;;;:::o;33663:175::-;33803:27;33799:1;33791:6;33787:14;33780:51;33663:175;:::o;33844:366::-;33986:3;34007:67;34071:2;34066:3;34007:67;:::i;:::-;34000:74;;34083:93;34172:3;34083:93;:::i;:::-;34201:2;34196:3;34192:12;34185:19;;33844:366;;;:::o;34216:419::-;34382:4;34420:2;34409:9;34405:18;34397:26;;34469:9;34463:4;34459:20;34455:1;34444:9;34440:17;34433:47;34497:131;34623:4;34497:131;:::i;:::-;34489:139;;34216:419;;;:::o;34641:237::-;34781:34;34777:1;34769:6;34765:14;34758:58;34850:20;34845:2;34837:6;34833:15;34826:45;34641:237;:::o;34884:366::-;35026:3;35047:67;35111:2;35106:3;35047:67;:::i;:::-;35040:74;;35123:93;35212:3;35123:93;:::i;:::-;35241:2;35236:3;35232:12;35225:19;;34884:366;;;:::o;35256:419::-;35422:4;35460:2;35449:9;35445:18;35437:26;;35509:9;35503:4;35499:20;35495:1;35484:9;35480:17;35473:47;35537:131;35663:4;35537:131;:::i;:::-;35529:139;;35256:419;;;:::o;35681:182::-;35821:34;35817:1;35809:6;35805:14;35798:58;35681:182;:::o;35869:366::-;36011:3;36032:67;36096:2;36091:3;36032:67;:::i;:::-;36025:74;;36108:93;36197:3;36108:93;:::i;:::-;36226:2;36221:3;36217:12;36210:19;;35869:366;;;:::o;36241:419::-;36407:4;36445:2;36434:9;36430:18;36422:26;;36494:9;36488:4;36484:20;36480:1;36469:9;36465:17;36458:47;36522:131;36648:4;36522:131;:::i;:::-;36514:139;;36241:419;;;:::o;36666:178::-;36806:30;36802:1;36794:6;36790:14;36783:54;36666:178;:::o;36850:366::-;36992:3;37013:67;37077:2;37072:3;37013:67;:::i;:::-;37006:74;;37089:93;37178:3;37089:93;:::i;:::-;37207:2;37202:3;37198:12;37191:19;;36850:366;;;:::o;37222:419::-;37388:4;37426:2;37415:9;37411:18;37403:26;;37475:9;37469:4;37465:20;37461:1;37450:9;37446:17;37439:47;37503:131;37629:4;37503:131;:::i;:::-;37495:139;;37222:419;;;:::o;37647:98::-;37698:6;37732:5;37726:12;37716:22;;37647:98;;;:::o;37751:168::-;37834:11;37868:6;37863:3;37856:19;37908:4;37903:3;37899:14;37884:29;;37751:168;;;;:::o;37925:360::-;38011:3;38039:38;38071:5;38039:38;:::i;:::-;38093:70;38156:6;38151:3;38093:70;:::i;:::-;38086:77;;38172:52;38217:6;38212:3;38205:4;38198:5;38194:16;38172:52;:::i;:::-;38249:29;38271:6;38249:29;:::i;:::-;38244:3;38240:39;38233:46;;38015:270;37925:360;;;;:::o;38291:640::-;38486:4;38524:3;38513:9;38509:19;38501:27;;38538:71;38606:1;38595:9;38591:17;38582:6;38538:71;:::i;:::-;38619:72;38687:2;38676:9;38672:18;38663:6;38619:72;:::i;:::-;38701;38769:2;38758:9;38754:18;38745:6;38701:72;:::i;:::-;38820:9;38814:4;38810:20;38805:2;38794:9;38790:18;38783:48;38848:76;38919:4;38910:6;38848:76;:::i;:::-;38840:84;;38291:640;;;;;;;:::o;38937:141::-;38993:5;39024:6;39018:13;39009:22;;39040:32;39066:5;39040:32;:::i;:::-;38937:141;;;;:::o;39084:349::-;39153:6;39202:2;39190:9;39181:7;39177:23;39173:32;39170:119;;;39208:79;;:::i;:::-;39170:119;39328:1;39353:63;39408:7;39399:6;39388:9;39384:22;39353:63;:::i;:::-;39343:73;;39299:127;39084:349;;;;:::o;39439:180::-;39487:77;39484:1;39477:88;39584:4;39581:1;39574:15;39608:4;39605:1;39598:15

Swarm Source

ipfs://61325a6b58ecf007d910baeb8b557877dfe4ddd8aee28f782bf485dc03a26c4c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.