ETH Price: $3,263.80 (+0.08%)
Gas: 2 Gwei

Token

E.K.K.O. Academy (EKKO)
 

Overview

Max Total Supply

192 EKKO

Holders

119

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
2 EKKO
0x316a35ebc7bfb945ab84e8bf6167585602306192
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:
EKKO_ACADEMY

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-25
*/

/**
 *Submitted for verification at Etherscan.io on 2021-10-04
*/

// SPDX-License-Identifier: GPL-3.0

// File: @openzeppelin/contracts/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/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`, 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 be 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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 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);

    /**
     * @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;
}



// File: @openzeppelin/contracts/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 tokenId);

    /**
     * @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/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/utils/Strings.sol



pragma solidity ^0.8.0;

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

    /**
     * @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);
    }
}

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



pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/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/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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/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/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: balance query for the zero address");
        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: owner query for nonexistent token");
        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) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        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 overriden 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 owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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: transfer caller is not 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: transfer caller is not 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) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, 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);
    }

    /**
     * @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);
    }

    /**
     * @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 of token that is not own");
        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);
    }

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

    /**
     * @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 {
                    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 {}
}

// File: @openzeppelin/contracts/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: @openzeppelin/contracts/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() {
        _setOwner(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


pragma solidity ^0.8.0;



contract EKKO_ACADEMY is ERC721Enumerable, Ownable {
  using Strings for uint256;

  bool public paused = true;
  bool public whitelistOnly = true;
  bool public revealed = false;
  uint256 public maxMintAmount = 3;
  uint256 public cost = 0.055 ether;
  uint256 public maxSupply = 5555;
  uint256 public whitelistedSupply = 1100;
  string public baseURI;
  string public baseExtension = ".json";
  string public notRevealedUri;
  mapping(address => uint256) private walletMintNumber;
  mapping(address => bool) public whiteList;
  mapping(address => uint256) public freeMinters;

  constructor(
    string memory _initBaseURI,
    string memory _initNotRevealedUri
  ) ERC721('E.K.K.O. Academy', 'EKKO') {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
  }

  // internal
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }
  
  // public
  function freeMint() public payable {
    uint256 freeMintAmount = freeMinters[msg.sender];
    uint256 supply = totalSupply();

    require(!paused,                                                        "the contract is paused");
    require(freeMintAmount > 0,                                             "user is not eligible for free minting");
    require(supply + freeMintAmount <= maxSupply,                           "max NFT limit exceeded");
    require(walletMintNumber[msg.sender] + freeMintAmount <= maxMintAmount, "max NFT per address exceeded");

    for (uint256 i = 1; i <= freeMintAmount; i++) _safeMint(msg.sender, supply + i);
    delete freeMinters[msg.sender];
    
    walletMintNumber[msg.sender] += freeMintAmount;
  }
  
  //public
  function whitelistMint(uint _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(!paused,                                                        "the contract is paused");
    require(_mintAmount > 0,                                                "need to mint at least 1 NFT");
    require(supply + _mintAmount <= maxSupply,                              "max NFT limit exceeded");
    require(walletMintNumber[msg.sender] + _mintAmount <= maxMintAmount,    "max NFT per address exceeded");
    
    require(supply + _mintAmount <= whitelistedSupply,                      "max whitelisted NFT limit exceeded");
    require(whiteList[msg.sender],                                          "user is not whitelisted");
    require(msg.value >= cost * _mintAmount,                                "insufficient funds");

    for (uint256 i = 1; i <= _mintAmount; i++) _safeMint(msg.sender, supply + i);
    
    walletMintNumber[msg.sender] += _mintAmount;
  }
  
  // public
  function mint(uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(!paused,                                                        "the contract is paused");
    require(!whitelistOnly,                                                 "the contract is in whitelist only mode");
    require(_mintAmount > 0,                                                "need to mint at least 1 NFT");
    require(supply + _mintAmount <= maxSupply,                              "max NFT limit exceeded");
    require(walletMintNumber[msg.sender] + _mintAmount <= maxMintAmount,    "max NFT per address exceeded");
    
    require(msg.value >= cost * _mintAmount,                                "insufficient funds");
    
    for (uint256 i = 1; i <= _mintAmount; i++) _safeMint(msg.sender, supply + i);
    
    walletMintNumber[msg.sender] += _mintAmount;
  }
  
  
  function walletOfOwner(address _owner) public view returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  function tokenURI(uint256 tokenId) public view virtual override returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

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

  //only owner
  function reveal() public onlyOwner() {
      revealed = true;
  }
  
  // @DEV is this needed?
  function setCost(uint256 _newCost) public onlyOwner() {
    cost = _newCost;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() {
    maxMintAmount = _newmaxMintAmount;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }
  
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function setPause(bool _state) public onlyOwner {
    paused = _state;
  }
  
  function setOnlyWhitelisted(bool _state) public onlyOwner {
    whitelistOnly = _state;
  }
  
  function setWhitelistedSupply(uint256 _whitelistedSupply) public onlyOwner {
      whitelistedSupply = _whitelistedSupply;
  }
  
  function whitelistAddress(address[] memory _address) public onlyOwner {
    for (uint256 i = 0; i < _address.length; i++) whiteList[_address[i]] = true;
  }
  
  function freeMintAddress(address[] memory _address, uint256[] memory _amount) public onlyOwner {
    for (uint256 i = 0; i < _address.length; i++) freeMinters[_address[i]] = _amount[i];
  }
 
  function withdraw() public payable onlyOwner {
    (bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
    require(success);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","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":"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"freeMintAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeMinters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistedSupply","type":"uint256"}],"name":"setWhitelistedSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

600a805462ffffff60a01b191661010160a01b1790556003600b5566c3663566a58000600c556115b3600d5561044c600e5560c06040526005608081905264173539b7b760d91b60a09081526200005a916010919062000249565b503480156200006857600080fd5b5060405162003338380380620033388339810160408190526200008b91620003a6565b604080518082018252601081526f452e4b2e4b2e4f2e2041636164656d7960801b602080830191825283518085019094526004845263454b4b4f60e01b908401528151919291620000df9160009162000249565b508051620000f590600190602084019062000249565b505050620001126200010c6200013060201b60201c565b62000134565b6200011d8262000186565b6200012881620001ee565b505062000463565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001d55760405162461bcd60e51b815260206004820181905260248201526000805160206200331883398151915260448201526064015b60405180910390fd5b8051620001ea90600f90602084019062000249565b5050565b600a546001600160a01b03163314620002395760405162461bcd60e51b81526020600482018190526024820152600080516020620033188339815191526044820152606401620001cc565b8051620001ea9060119060208401905b828054620002579062000410565b90600052602060002090601f0160209004810192826200027b5760008555620002c6565b82601f106200029657805160ff1916838001178555620002c6565b82800160010185558215620002c6579182015b82811115620002c6578251825591602001919060010190620002a9565b50620002d4929150620002d8565b5090565b5b80821115620002d45760008155600101620002d9565b600082601f8301126200030157600080fd5b81516001600160401b03808211156200031e576200031e6200044d565b604051601f8301601f19908116603f011681019082821181831017156200034957620003496200044d565b816040528381526020925086838588010111156200036657600080fd5b600091505b838210156200038a57858201830151818301840152908201906200036b565b838211156200039c5760008385830101525b9695505050505050565b60008060408385031215620003ba57600080fd5b82516001600160401b0380821115620003d257600080fd5b620003e086838701620002ef565b93506020850151915080821115620003f757600080fd5b506200040685828601620002ef565b9150509250929050565b600181811c908216806200042557607f821691505b602082108114156200044757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612ea580620004736000396000f3fe6080604052600436106102885760003560e01c80636352211e1161015a578063b88d4fde116100c1578063d86f1ab01161007a578063d86f1ab014610755578063da3ef23f1461076b578063e985e9c51461078b578063f2c4ce1e146107d4578063f2fde38b146107f4578063f8b087121461081457600080fd5b8063b88d4fde146106aa578063bedb86fb146106ca578063c6682862146106ea578063c87b56dd146106ff578063d5abeb011461071f578063d64852771461073557600080fd5b80638da5cb5b116101135780638da5cb5b1461060f57806395d89b411461062d578063a0712d6814610642578063a22cb46514610655578063a475b5dd14610675578063b31d61b01461068a57600080fd5b80636352211e146105725780636c0360eb1461059257806370a08231146105a7578063715018a6146105c75780637f00c7a6146105dc578063868ff4a2146105fc57600080fd5b80633c952764116101fe5780634b4687b5116101b75780634b4687b5146104c75780634f6ccce7146104e8578063518302271461050857806355f804b3146105295780635b70ea9f146105495780635c975abb1461055157600080fd5b80633c952764146104125780633ccfd60b1461043257806342842e0e1461043a578063438b63001461045a57806344a0d68a146104875780634a6615fe146104a757600080fd5b806313faede61161025057806313faede61461035357806318160ddd14610377578063239c70ae1461038c57806323b872dd146103a25780632f745c59146103c2578063372c12b1146103e257600080fd5b806301ffc9a71461028d57806306fdde03146102c2578063081812fc146102e4578063081c8c441461031c578063095ea7b314610331575b600080fd5b34801561029957600080fd5b506102ad6102a836600461290f565b610841565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d761086c565b6040516102b99190612b1c565b3480156102f057600080fd5b506103046102ff366004612992565b6108fe565b6040516001600160a01b0390911681526020016102b9565b34801561032857600080fd5b506102d7610998565b34801561033d57600080fd5b5061035161034c3660046127d3565b610a26565b005b34801561035f57600080fd5b50610369600c5481565b6040519081526020016102b9565b34801561038357600080fd5b50600854610369565b34801561039857600080fd5b50610369600b5481565b3480156103ae57600080fd5b506103516103bd3660046126f1565b610b3c565b3480156103ce57600080fd5b506103696103dd3660046127d3565b610b6d565b3480156103ee57600080fd5b506102ad6103fd3660046126a3565b60136020526000908152604090205460ff1681565b34801561041e57600080fd5b5061035161042d3660046128f4565b610c03565b610351610c4b565b34801561044657600080fd5b506103516104553660046126f1565b610ccd565b34801561046657600080fd5b5061047a6104753660046126a3565b610ce8565b6040516102b99190612ad8565b34801561049357600080fd5b506103516104a2366004612992565b610d8a565b3480156104b357600080fd5b506103516104c2366004612832565b610db9565b3480156104d357600080fd5b50600a546102ad90600160a81b900460ff1681565b3480156104f457600080fd5b50610369610503366004612992565b610e5e565b34801561051457600080fd5b50600a546102ad90600160b01b900460ff1681565b34801561053557600080fd5b50610351610544366004612949565b610ef1565b610351610f32565b34801561055d57600080fd5b50600a546102ad90600160a01b900460ff1681565b34801561057e57600080fd5b5061030461058d366004612992565b6110a3565b34801561059e57600080fd5b506102d761111a565b3480156105b357600080fd5b506103696105c23660046126a3565b611127565b3480156105d357600080fd5b506103516111ae565b3480156105e857600080fd5b506103516105f7366004612992565b6111e4565b61035161060a366004612992565b611213565b34801561061b57600080fd5b50600a546001600160a01b0316610304565b34801561063957600080fd5b506102d7611463565b610351610650366004612992565b611472565b34801561066157600080fd5b506103516106703660046127a9565b611646565b34801561068157600080fd5b5061035161170b565b34801561069657600080fd5b506103516106a53660046127fd565b61174a565b3480156106b657600080fd5b506103516106c536600461272d565b6117dc565b3480156106d657600080fd5b506103516106e53660046128f4565b611814565b3480156106f657600080fd5b506102d761185c565b34801561070b57600080fd5b506102d761071a366004612992565b611869565b34801561072b57600080fd5b50610369600d5481565b34801561074157600080fd5b50610351610750366004612992565b6119ea565b34801561076157600080fd5b50610369600e5481565b34801561077757600080fd5b50610351610786366004612949565b611a19565b34801561079757600080fd5b506102ad6107a63660046126be565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107e057600080fd5b506103516107ef366004612949565b611a56565b34801561080057600080fd5b5061035161080f3660046126a3565b611a93565b34801561082057600080fd5b5061036961082f3660046126a3565b60146020526000908152604090205481565b60006001600160e01b0319821663780e9d6360e01b1480610866575061086682611b2b565b92915050565b60606000805461087b90612d81565b80601f01602080910402602001604051908101604052809291908181526020018280546108a790612d81565b80156108f45780601f106108c9576101008083540402835291602001916108f4565b820191906000526020600020905b8154815290600101906020018083116108d757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661097c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b601180546109a590612d81565b80601f01602080910402602001604051908101604052809291908181526020018280546109d190612d81565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b505050505081565b6000610a31826110a3565b9050806001600160a01b0316836001600160a01b03161415610a9f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610973565b336001600160a01b0382161480610abb5750610abb81336107a6565b610b2d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610973565b610b378383611b7b565b505050565b610b463382611be9565b610b625760405162461bcd60e51b815260040161097390612c4d565b610b37838383611ce0565b6000610b7883611127565b8210610bda5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610973565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610c2d5760405162461bcd60e51b815260040161097390612be8565b600a8054911515600160a81b0260ff60a81b19909216919091179055565b600a546001600160a01b03163314610c755760405162461bcd60e51b815260040161097390612be8565b604051600090339047908381818185875af1925050503d8060008114610cb7576040519150601f19603f3d011682016040523d82523d6000602084013e610cbc565b606091505b5050905080610cca57600080fd5b50565b610b37838383604051806020016040528060008152506117dc565b60606000610cf583611127565b905060008167ffffffffffffffff811115610d1257610d12612e43565b604051908082528060200260200182016040528015610d3b578160200160208202803683370190505b50905060005b82811015610d8257610d538582610b6d565b828281518110610d6557610d65612e2d565b602090810291909101015280610d7a81612dbc565b915050610d41565b509392505050565b600a546001600160a01b03163314610db45760405162461bcd60e51b815260040161097390612be8565b600c55565b600a546001600160a01b03163314610de35760405162461bcd60e51b815260040161097390612be8565b60005b8251811015610b3757818181518110610e0157610e01612e2d565b602002602001015160146000858481518110610e1f57610e1f612e2d565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080610e5690612dbc565b915050610de6565b6000610e6960085490565b8210610ecc5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610973565b60088281548110610edf57610edf612e2d565b90600052602060002001549050919050565b600a546001600160a01b03163314610f1b5760405162461bcd60e51b815260040161097390612be8565b8051610f2e90600f90602084019061250d565b5050565b3360009081526014602052604081205490610f4c60085490565b600a54909150600160a01b900460ff1615610f795760405162461bcd60e51b815260040161097390612c1d565b60008211610fd75760405162461bcd60e51b815260206004820152602560248201527f75736572206973206e6f7420656c696769626c6520666f722066726565206d696044820152646e74696e6760d81b6064820152608401610973565b600d54610fe48383612cf3565b11156110025760405162461bcd60e51b815260040161097390612bb8565b600b5433600090815260126020526040902054611020908490612cf3565b111561103e5760405162461bcd60e51b815260040161097390612b81565b60015b82811161106d5761105b336110568385612cf3565b611e8b565b8061106581612dbc565b915050611041565b5033600090815260146020908152604080832083905560129091528120805484929061109a908490612cf3565b90915550505050565b6000818152600260205260408120546001600160a01b0316806108665760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610973565b600f80546109a590612d81565b60006001600160a01b0382166111925760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610973565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146111d85760405162461bcd60e51b815260040161097390612be8565b6111e26000611ea5565b565b600a546001600160a01b0316331461120e5760405162461bcd60e51b815260040161097390612be8565b600b55565b600061121e60085490565b600a54909150600160a01b900460ff161561124b5760405162461bcd60e51b815260040161097390612c1d565b6000821161129b5760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610973565b600d546112a88383612cf3565b11156112c65760405162461bcd60e51b815260040161097390612bb8565b600b54336000908152601260205260409020546112e4908490612cf3565b11156113025760405162461bcd60e51b815260040161097390612b81565b600e5461130f8383612cf3565b11156113685760405162461bcd60e51b815260206004820152602260248201527f6d61782077686974656c6973746564204e4654206c696d697420657863656564604482015261195960f21b6064820152608401610973565b3360009081526013602052604090205460ff166113c75760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610973565b81600c546113d59190612d1f565b3410156114195760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610973565b60015b82811161144357611431336110568385612cf3565b8061143b81612dbc565b91505061141c565b50336000908152601260205260408120805484929061109a908490612cf3565b60606001805461087b90612d81565b600061147d60085490565b600a54909150600160a01b900460ff16156114aa5760405162461bcd60e51b815260040161097390612c1d565b600a54600160a81b900460ff16156115135760405162461bcd60e51b815260206004820152602660248201527f74686520636f6e747261637420697320696e2077686974656c697374206f6e6c60448201526579206d6f646560d01b6064820152608401610973565b600082116115635760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610973565b600d546115708383612cf3565b111561158e5760405162461bcd60e51b815260040161097390612bb8565b600b54336000908152601260205260409020546115ac908490612cf3565b11156115ca5760405162461bcd60e51b815260040161097390612b81565b81600c546115d89190612d1f565b34101561161c5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610973565b60015b82811161144357611634336110568385612cf3565b8061163e81612dbc565b91505061161f565b6001600160a01b03821633141561169f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610973565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146117355760405162461bcd60e51b815260040161097390612be8565b600a805460ff60b01b1916600160b01b179055565b600a546001600160a01b031633146117745760405162461bcd60e51b815260040161097390612be8565b60005b8151811015610f2e5760016013600084848151811061179857611798612e2d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806117d481612dbc565b915050611777565b6117e63383611be9565b6118025760405162461bcd60e51b815260040161097390612c4d565b61180e84848484611ef7565b50505050565b600a546001600160a01b0316331461183e5760405162461bcd60e51b815260040161097390612be8565b600a8054911515600160a01b0260ff60a01b19909216919091179055565b601080546109a590612d81565b6000818152600260205260409020546060906001600160a01b03166118e85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610973565b600a54600160b01b900460ff1661198b576011805461190690612d81565b80601f016020809104026020016040519081016040528092919081815260200182805461193290612d81565b801561197f5780601f106119545761010080835404028352916020019161197f565b820191906000526020600020905b81548152906001019060200180831161196257829003601f168201915b50505050509050919050565b6000611995611f2a565b905060008151116119b557604051806020016040528060008152506119e3565b806119bf84611f39565b60106040516020016119d3939291906129d7565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611a145760405162461bcd60e51b815260040161097390612be8565b600e55565b600a546001600160a01b03163314611a435760405162461bcd60e51b815260040161097390612be8565b8051610f2e90601090602084019061250d565b600a546001600160a01b03163314611a805760405162461bcd60e51b815260040161097390612be8565b8051610f2e90601190602084019061250d565b600a546001600160a01b03163314611abd5760405162461bcd60e51b815260040161097390612be8565b6001600160a01b038116611b225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610973565b610cca81611ea5565b60006001600160e01b031982166380ac58cd60e01b1480611b5c57506001600160e01b03198216635b5e139f60e01b145b8061086657506301ffc9a760e01b6001600160e01b0319831614610866565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611bb0826110a3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611c625760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610973565b6000611c6d836110a3565b9050806001600160a01b0316846001600160a01b03161480611ca85750836001600160a01b0316611c9d846108fe565b6001600160a01b0316145b80611cd857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611cf3826110a3565b6001600160a01b031614611d5b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610973565b6001600160a01b038216611dbd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610973565b611dc8838383612037565b611dd3600082611b7b565b6001600160a01b0383166000908152600360205260408120805460019290611dfc908490612d3e565b90915550506001600160a01b0382166000908152600360205260408120805460019290611e2a908490612cf3565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610f2e8282604051806020016040528060008152506120ef565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611f02848484611ce0565b611f0e84848484612122565b61180e5760405162461bcd60e51b815260040161097390612b2f565b6060600f805461087b90612d81565b606081611f5d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611f875780611f7181612dbc565b9150611f809050600a83612d0b565b9150611f61565b60008167ffffffffffffffff811115611fa257611fa2612e43565b6040519080825280601f01601f191660200182016040528015611fcc576020820181803683370190505b5090505b8415611cd857611fe1600183612d3e565b9150611fee600a86612dd7565b611ff9906030612cf3565b60f81b81838151811061200e5761200e612e2d565b60200101906001600160f81b031916908160001a905350612030600a86612d0b565b9450611fd0565b6001600160a01b0383166120925761208d81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6120b5565b816001600160a01b0316836001600160a01b0316146120b5576120b5838261222f565b6001600160a01b0382166120cc57610b37816122cc565b826001600160a01b0316826001600160a01b031614610b3757610b37828261237b565b6120f983836123bf565b6121066000848484612122565b610b375760405162461bcd60e51b815260040161097390612b2f565b60006001600160a01b0384163b1561222457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612166903390899088908890600401612a9b565b602060405180830381600087803b15801561218057600080fd5b505af19250505080156121b0575060408051601f3d908101601f191682019092526121ad9181019061292c565b60015b61220a573d8080156121de576040519150601f19603f3d011682016040523d82523d6000602084013e6121e3565b606091505b5080516122025760405162461bcd60e51b815260040161097390612b2f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611cd8565b506001949350505050565b6000600161223c84611127565b6122469190612d3e565b600083815260076020526040902054909150808214612299576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906122de90600190612d3e565b6000838152600960205260408120546008805493945090928490811061230657612306612e2d565b90600052602060002001549050806008838154811061232757612327612e2d565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061235f5761235f612e17565b6001900381819060005260206000200160009055905550505050565b600061238683611127565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166124155760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610973565b6000818152600260205260409020546001600160a01b03161561247a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610973565b61248660008383612037565b6001600160a01b03821660009081526003602052604081208054600192906124af908490612cf3565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461251990612d81565b90600052602060002090601f01602090048101928261253b5760008555612581565b82601f1061255457805160ff1916838001178555612581565b82800160010185558215612581579182015b82811115612581578251825591602001919060010190612566565b5061258d929150612591565b5090565b5b8082111561258d5760008155600101612592565b600067ffffffffffffffff8311156125c0576125c0612e43565b6125d3601f8401601f1916602001612c9e565b90508281528383830111156125e757600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461261557600080fd5b919050565b600082601f83011261262b57600080fd5b8135602061264061263b83612ccf565b612c9e565b80838252828201915082860187848660051b890101111561266057600080fd5b60005b8581101561268657612674826125fe565b84529284019290840190600101612663565b5090979650505050505050565b8035801515811461261557600080fd5b6000602082840312156126b557600080fd5b6119e3826125fe565b600080604083850312156126d157600080fd5b6126da836125fe565b91506126e8602084016125fe565b90509250929050565b60008060006060848603121561270657600080fd5b61270f846125fe565b925061271d602085016125fe565b9150604084013590509250925092565b6000806000806080858703121561274357600080fd5b61274c856125fe565b935061275a602086016125fe565b925060408501359150606085013567ffffffffffffffff81111561277d57600080fd5b8501601f8101871361278e57600080fd5b61279d878235602084016125a6565b91505092959194509250565b600080604083850312156127bc57600080fd5b6127c5836125fe565b91506126e860208401612693565b600080604083850312156127e657600080fd5b6127ef836125fe565b946020939093013593505050565b60006020828403121561280f57600080fd5b813567ffffffffffffffff81111561282657600080fd5b611cd88482850161261a565b6000806040838503121561284557600080fd5b823567ffffffffffffffff8082111561285d57600080fd5b6128698683870161261a565b935060209150818501358181111561288057600080fd5b85019050601f8101861361289357600080fd5b80356128a161263b82612ccf565b80828252848201915084840189868560051b87010111156128c157600080fd5b600094505b838510156128e45780358352600194909401939185019185016128c6565b5080955050505050509250929050565b60006020828403121561290657600080fd5b6119e382612693565b60006020828403121561292157600080fd5b81356119e381612e59565b60006020828403121561293e57600080fd5b81516119e381612e59565b60006020828403121561295b57600080fd5b813567ffffffffffffffff81111561297257600080fd5b8201601f8101841361298357600080fd5b611cd8848235602084016125a6565b6000602082840312156129a457600080fd5b5035919050565b600081518084526129c3816020860160208601612d55565b601f01601f19169290920160200192915050565b6000845160206129ea8285838a01612d55565b8551918401916129fd8184848a01612d55565b8554920191600090600181811c9080831680612a1a57607f831692505b858310811415612a3857634e487b7160e01b85526022600452602485fd5b808015612a4c5760018114612a5d57612a8a565b60ff19851688528388019550612a8a565b60008b81526020902060005b85811015612a825781548a820152908401908801612a69565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ace908301846129ab565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612b1057835183529284019291840191600101612af4565b50909695505050505050565b6020815260006119e360208301846129ab565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f6d6178204e465420706572206164647265737320657863656564656400000000604082015260600190565b6020808252601690820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601690820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612cc757612cc7612e43565b604052919050565b600067ffffffffffffffff821115612ce957612ce9612e43565b5060051b60200190565b60008219821115612d0657612d06612deb565b500190565b600082612d1a57612d1a612e01565b500490565b6000816000190483118215151615612d3957612d39612deb565b500290565b600082821015612d5057612d50612deb565b500390565b60005b83811015612d70578181015183820152602001612d58565b8381111561180e5750506000910152565b600181811c90821680612d9557607f821691505b60208210811415612db657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612dd057612dd0612deb565b5060010190565b600082612de657612de6612e01565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610cca57600080fdfea26469706673582212203e775225b448f618734c61152aa333fa977b044c840407b098a3103ec0b5a70264736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65720000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5546726f575852534456687a7061595553444748504a6f5a587a67536d79485578314e5555665953776569450000000000000000000000

Deployed Bytecode

0x6080604052600436106102885760003560e01c80636352211e1161015a578063b88d4fde116100c1578063d86f1ab01161007a578063d86f1ab014610755578063da3ef23f1461076b578063e985e9c51461078b578063f2c4ce1e146107d4578063f2fde38b146107f4578063f8b087121461081457600080fd5b8063b88d4fde146106aa578063bedb86fb146106ca578063c6682862146106ea578063c87b56dd146106ff578063d5abeb011461071f578063d64852771461073557600080fd5b80638da5cb5b116101135780638da5cb5b1461060f57806395d89b411461062d578063a0712d6814610642578063a22cb46514610655578063a475b5dd14610675578063b31d61b01461068a57600080fd5b80636352211e146105725780636c0360eb1461059257806370a08231146105a7578063715018a6146105c75780637f00c7a6146105dc578063868ff4a2146105fc57600080fd5b80633c952764116101fe5780634b4687b5116101b75780634b4687b5146104c75780634f6ccce7146104e8578063518302271461050857806355f804b3146105295780635b70ea9f146105495780635c975abb1461055157600080fd5b80633c952764146104125780633ccfd60b1461043257806342842e0e1461043a578063438b63001461045a57806344a0d68a146104875780634a6615fe146104a757600080fd5b806313faede61161025057806313faede61461035357806318160ddd14610377578063239c70ae1461038c57806323b872dd146103a25780632f745c59146103c2578063372c12b1146103e257600080fd5b806301ffc9a71461028d57806306fdde03146102c2578063081812fc146102e4578063081c8c441461031c578063095ea7b314610331575b600080fd5b34801561029957600080fd5b506102ad6102a836600461290f565b610841565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d761086c565b6040516102b99190612b1c565b3480156102f057600080fd5b506103046102ff366004612992565b6108fe565b6040516001600160a01b0390911681526020016102b9565b34801561032857600080fd5b506102d7610998565b34801561033d57600080fd5b5061035161034c3660046127d3565b610a26565b005b34801561035f57600080fd5b50610369600c5481565b6040519081526020016102b9565b34801561038357600080fd5b50600854610369565b34801561039857600080fd5b50610369600b5481565b3480156103ae57600080fd5b506103516103bd3660046126f1565b610b3c565b3480156103ce57600080fd5b506103696103dd3660046127d3565b610b6d565b3480156103ee57600080fd5b506102ad6103fd3660046126a3565b60136020526000908152604090205460ff1681565b34801561041e57600080fd5b5061035161042d3660046128f4565b610c03565b610351610c4b565b34801561044657600080fd5b506103516104553660046126f1565b610ccd565b34801561046657600080fd5b5061047a6104753660046126a3565b610ce8565b6040516102b99190612ad8565b34801561049357600080fd5b506103516104a2366004612992565b610d8a565b3480156104b357600080fd5b506103516104c2366004612832565b610db9565b3480156104d357600080fd5b50600a546102ad90600160a81b900460ff1681565b3480156104f457600080fd5b50610369610503366004612992565b610e5e565b34801561051457600080fd5b50600a546102ad90600160b01b900460ff1681565b34801561053557600080fd5b50610351610544366004612949565b610ef1565b610351610f32565b34801561055d57600080fd5b50600a546102ad90600160a01b900460ff1681565b34801561057e57600080fd5b5061030461058d366004612992565b6110a3565b34801561059e57600080fd5b506102d761111a565b3480156105b357600080fd5b506103696105c23660046126a3565b611127565b3480156105d357600080fd5b506103516111ae565b3480156105e857600080fd5b506103516105f7366004612992565b6111e4565b61035161060a366004612992565b611213565b34801561061b57600080fd5b50600a546001600160a01b0316610304565b34801561063957600080fd5b506102d7611463565b610351610650366004612992565b611472565b34801561066157600080fd5b506103516106703660046127a9565b611646565b34801561068157600080fd5b5061035161170b565b34801561069657600080fd5b506103516106a53660046127fd565b61174a565b3480156106b657600080fd5b506103516106c536600461272d565b6117dc565b3480156106d657600080fd5b506103516106e53660046128f4565b611814565b3480156106f657600080fd5b506102d761185c565b34801561070b57600080fd5b506102d761071a366004612992565b611869565b34801561072b57600080fd5b50610369600d5481565b34801561074157600080fd5b50610351610750366004612992565b6119ea565b34801561076157600080fd5b50610369600e5481565b34801561077757600080fd5b50610351610786366004612949565b611a19565b34801561079757600080fd5b506102ad6107a63660046126be565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107e057600080fd5b506103516107ef366004612949565b611a56565b34801561080057600080fd5b5061035161080f3660046126a3565b611a93565b34801561082057600080fd5b5061036961082f3660046126a3565b60146020526000908152604090205481565b60006001600160e01b0319821663780e9d6360e01b1480610866575061086682611b2b565b92915050565b60606000805461087b90612d81565b80601f01602080910402602001604051908101604052809291908181526020018280546108a790612d81565b80156108f45780601f106108c9576101008083540402835291602001916108f4565b820191906000526020600020905b8154815290600101906020018083116108d757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661097c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b601180546109a590612d81565b80601f01602080910402602001604051908101604052809291908181526020018280546109d190612d81565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b505050505081565b6000610a31826110a3565b9050806001600160a01b0316836001600160a01b03161415610a9f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610973565b336001600160a01b0382161480610abb5750610abb81336107a6565b610b2d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610973565b610b378383611b7b565b505050565b610b463382611be9565b610b625760405162461bcd60e51b815260040161097390612c4d565b610b37838383611ce0565b6000610b7883611127565b8210610bda5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610973565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610c2d5760405162461bcd60e51b815260040161097390612be8565b600a8054911515600160a81b0260ff60a81b19909216919091179055565b600a546001600160a01b03163314610c755760405162461bcd60e51b815260040161097390612be8565b604051600090339047908381818185875af1925050503d8060008114610cb7576040519150601f19603f3d011682016040523d82523d6000602084013e610cbc565b606091505b5050905080610cca57600080fd5b50565b610b37838383604051806020016040528060008152506117dc565b60606000610cf583611127565b905060008167ffffffffffffffff811115610d1257610d12612e43565b604051908082528060200260200182016040528015610d3b578160200160208202803683370190505b50905060005b82811015610d8257610d538582610b6d565b828281518110610d6557610d65612e2d565b602090810291909101015280610d7a81612dbc565b915050610d41565b509392505050565b600a546001600160a01b03163314610db45760405162461bcd60e51b815260040161097390612be8565b600c55565b600a546001600160a01b03163314610de35760405162461bcd60e51b815260040161097390612be8565b60005b8251811015610b3757818181518110610e0157610e01612e2d565b602002602001015160146000858481518110610e1f57610e1f612e2d565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080610e5690612dbc565b915050610de6565b6000610e6960085490565b8210610ecc5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610973565b60088281548110610edf57610edf612e2d565b90600052602060002001549050919050565b600a546001600160a01b03163314610f1b5760405162461bcd60e51b815260040161097390612be8565b8051610f2e90600f90602084019061250d565b5050565b3360009081526014602052604081205490610f4c60085490565b600a54909150600160a01b900460ff1615610f795760405162461bcd60e51b815260040161097390612c1d565b60008211610fd75760405162461bcd60e51b815260206004820152602560248201527f75736572206973206e6f7420656c696769626c6520666f722066726565206d696044820152646e74696e6760d81b6064820152608401610973565b600d54610fe48383612cf3565b11156110025760405162461bcd60e51b815260040161097390612bb8565b600b5433600090815260126020526040902054611020908490612cf3565b111561103e5760405162461bcd60e51b815260040161097390612b81565b60015b82811161106d5761105b336110568385612cf3565b611e8b565b8061106581612dbc565b915050611041565b5033600090815260146020908152604080832083905560129091528120805484929061109a908490612cf3565b90915550505050565b6000818152600260205260408120546001600160a01b0316806108665760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610973565b600f80546109a590612d81565b60006001600160a01b0382166111925760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610973565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146111d85760405162461bcd60e51b815260040161097390612be8565b6111e26000611ea5565b565b600a546001600160a01b0316331461120e5760405162461bcd60e51b815260040161097390612be8565b600b55565b600061121e60085490565b600a54909150600160a01b900460ff161561124b5760405162461bcd60e51b815260040161097390612c1d565b6000821161129b5760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610973565b600d546112a88383612cf3565b11156112c65760405162461bcd60e51b815260040161097390612bb8565b600b54336000908152601260205260409020546112e4908490612cf3565b11156113025760405162461bcd60e51b815260040161097390612b81565b600e5461130f8383612cf3565b11156113685760405162461bcd60e51b815260206004820152602260248201527f6d61782077686974656c6973746564204e4654206c696d697420657863656564604482015261195960f21b6064820152608401610973565b3360009081526013602052604090205460ff166113c75760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610973565b81600c546113d59190612d1f565b3410156114195760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610973565b60015b82811161144357611431336110568385612cf3565b8061143b81612dbc565b91505061141c565b50336000908152601260205260408120805484929061109a908490612cf3565b60606001805461087b90612d81565b600061147d60085490565b600a54909150600160a01b900460ff16156114aa5760405162461bcd60e51b815260040161097390612c1d565b600a54600160a81b900460ff16156115135760405162461bcd60e51b815260206004820152602660248201527f74686520636f6e747261637420697320696e2077686974656c697374206f6e6c60448201526579206d6f646560d01b6064820152608401610973565b600082116115635760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610973565b600d546115708383612cf3565b111561158e5760405162461bcd60e51b815260040161097390612bb8565b600b54336000908152601260205260409020546115ac908490612cf3565b11156115ca5760405162461bcd60e51b815260040161097390612b81565b81600c546115d89190612d1f565b34101561161c5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610973565b60015b82811161144357611634336110568385612cf3565b8061163e81612dbc565b91505061161f565b6001600160a01b03821633141561169f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610973565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146117355760405162461bcd60e51b815260040161097390612be8565b600a805460ff60b01b1916600160b01b179055565b600a546001600160a01b031633146117745760405162461bcd60e51b815260040161097390612be8565b60005b8151811015610f2e5760016013600084848151811061179857611798612e2d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806117d481612dbc565b915050611777565b6117e63383611be9565b6118025760405162461bcd60e51b815260040161097390612c4d565b61180e84848484611ef7565b50505050565b600a546001600160a01b0316331461183e5760405162461bcd60e51b815260040161097390612be8565b600a8054911515600160a01b0260ff60a01b19909216919091179055565b601080546109a590612d81565b6000818152600260205260409020546060906001600160a01b03166118e85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610973565b600a54600160b01b900460ff1661198b576011805461190690612d81565b80601f016020809104026020016040519081016040528092919081815260200182805461193290612d81565b801561197f5780601f106119545761010080835404028352916020019161197f565b820191906000526020600020905b81548152906001019060200180831161196257829003601f168201915b50505050509050919050565b6000611995611f2a565b905060008151116119b557604051806020016040528060008152506119e3565b806119bf84611f39565b60106040516020016119d3939291906129d7565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611a145760405162461bcd60e51b815260040161097390612be8565b600e55565b600a546001600160a01b03163314611a435760405162461bcd60e51b815260040161097390612be8565b8051610f2e90601090602084019061250d565b600a546001600160a01b03163314611a805760405162461bcd60e51b815260040161097390612be8565b8051610f2e90601190602084019061250d565b600a546001600160a01b03163314611abd5760405162461bcd60e51b815260040161097390612be8565b6001600160a01b038116611b225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610973565b610cca81611ea5565b60006001600160e01b031982166380ac58cd60e01b1480611b5c57506001600160e01b03198216635b5e139f60e01b145b8061086657506301ffc9a760e01b6001600160e01b0319831614610866565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611bb0826110a3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611c625760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610973565b6000611c6d836110a3565b9050806001600160a01b0316846001600160a01b03161480611ca85750836001600160a01b0316611c9d846108fe565b6001600160a01b0316145b80611cd857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611cf3826110a3565b6001600160a01b031614611d5b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610973565b6001600160a01b038216611dbd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610973565b611dc8838383612037565b611dd3600082611b7b565b6001600160a01b0383166000908152600360205260408120805460019290611dfc908490612d3e565b90915550506001600160a01b0382166000908152600360205260408120805460019290611e2a908490612cf3565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610f2e8282604051806020016040528060008152506120ef565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611f02848484611ce0565b611f0e84848484612122565b61180e5760405162461bcd60e51b815260040161097390612b2f565b6060600f805461087b90612d81565b606081611f5d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611f875780611f7181612dbc565b9150611f809050600a83612d0b565b9150611f61565b60008167ffffffffffffffff811115611fa257611fa2612e43565b6040519080825280601f01601f191660200182016040528015611fcc576020820181803683370190505b5090505b8415611cd857611fe1600183612d3e565b9150611fee600a86612dd7565b611ff9906030612cf3565b60f81b81838151811061200e5761200e612e2d565b60200101906001600160f81b031916908160001a905350612030600a86612d0b565b9450611fd0565b6001600160a01b0383166120925761208d81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6120b5565b816001600160a01b0316836001600160a01b0316146120b5576120b5838261222f565b6001600160a01b0382166120cc57610b37816122cc565b826001600160a01b0316826001600160a01b031614610b3757610b37828261237b565b6120f983836123bf565b6121066000848484612122565b610b375760405162461bcd60e51b815260040161097390612b2f565b60006001600160a01b0384163b1561222457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612166903390899088908890600401612a9b565b602060405180830381600087803b15801561218057600080fd5b505af19250505080156121b0575060408051601f3d908101601f191682019092526121ad9181019061292c565b60015b61220a573d8080156121de576040519150601f19603f3d011682016040523d82523d6000602084013e6121e3565b606091505b5080516122025760405162461bcd60e51b815260040161097390612b2f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611cd8565b506001949350505050565b6000600161223c84611127565b6122469190612d3e565b600083815260076020526040902054909150808214612299576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906122de90600190612d3e565b6000838152600960205260408120546008805493945090928490811061230657612306612e2d565b90600052602060002001549050806008838154811061232757612327612e2d565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061235f5761235f612e17565b6001900381819060005260206000200160009055905550505050565b600061238683611127565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166124155760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610973565b6000818152600260205260409020546001600160a01b03161561247a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610973565b61248660008383612037565b6001600160a01b03821660009081526003602052604081208054600192906124af908490612cf3565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461251990612d81565b90600052602060002090601f01602090048101928261253b5760008555612581565b82601f1061255457805160ff1916838001178555612581565b82800160010185558215612581579182015b82811115612581578251825591602001919060010190612566565b5061258d929150612591565b5090565b5b8082111561258d5760008155600101612592565b600067ffffffffffffffff8311156125c0576125c0612e43565b6125d3601f8401601f1916602001612c9e565b90508281528383830111156125e757600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461261557600080fd5b919050565b600082601f83011261262b57600080fd5b8135602061264061263b83612ccf565b612c9e565b80838252828201915082860187848660051b890101111561266057600080fd5b60005b8581101561268657612674826125fe565b84529284019290840190600101612663565b5090979650505050505050565b8035801515811461261557600080fd5b6000602082840312156126b557600080fd5b6119e3826125fe565b600080604083850312156126d157600080fd5b6126da836125fe565b91506126e8602084016125fe565b90509250929050565b60008060006060848603121561270657600080fd5b61270f846125fe565b925061271d602085016125fe565b9150604084013590509250925092565b6000806000806080858703121561274357600080fd5b61274c856125fe565b935061275a602086016125fe565b925060408501359150606085013567ffffffffffffffff81111561277d57600080fd5b8501601f8101871361278e57600080fd5b61279d878235602084016125a6565b91505092959194509250565b600080604083850312156127bc57600080fd5b6127c5836125fe565b91506126e860208401612693565b600080604083850312156127e657600080fd5b6127ef836125fe565b946020939093013593505050565b60006020828403121561280f57600080fd5b813567ffffffffffffffff81111561282657600080fd5b611cd88482850161261a565b6000806040838503121561284557600080fd5b823567ffffffffffffffff8082111561285d57600080fd5b6128698683870161261a565b935060209150818501358181111561288057600080fd5b85019050601f8101861361289357600080fd5b80356128a161263b82612ccf565b80828252848201915084840189868560051b87010111156128c157600080fd5b600094505b838510156128e45780358352600194909401939185019185016128c6565b5080955050505050509250929050565b60006020828403121561290657600080fd5b6119e382612693565b60006020828403121561292157600080fd5b81356119e381612e59565b60006020828403121561293e57600080fd5b81516119e381612e59565b60006020828403121561295b57600080fd5b813567ffffffffffffffff81111561297257600080fd5b8201601f8101841361298357600080fd5b611cd8848235602084016125a6565b6000602082840312156129a457600080fd5b5035919050565b600081518084526129c3816020860160208601612d55565b601f01601f19169290920160200192915050565b6000845160206129ea8285838a01612d55565b8551918401916129fd8184848a01612d55565b8554920191600090600181811c9080831680612a1a57607f831692505b858310811415612a3857634e487b7160e01b85526022600452602485fd5b808015612a4c5760018114612a5d57612a8a565b60ff19851688528388019550612a8a565b60008b81526020902060005b85811015612a825781548a820152908401908801612a69565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ace908301846129ab565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612b1057835183529284019291840191600101612af4565b50909695505050505050565b6020815260006119e360208301846129ab565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f6d6178204e465420706572206164647265737320657863656564656400000000604082015260600190565b6020808252601690820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601690820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612cc757612cc7612e43565b604052919050565b600067ffffffffffffffff821115612ce957612ce9612e43565b5060051b60200190565b60008219821115612d0657612d06612deb565b500190565b600082612d1a57612d1a612e01565b500490565b6000816000190483118215151615612d3957612d39612deb565b500290565b600082821015612d5057612d50612deb565b500390565b60005b83811015612d70578181015183820152602001612d58565b8381111561180e5750506000910152565b600181811c90821680612d9557607f821691505b60208210811415612db657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612dd057612dd0612deb565b5060010190565b600082612de657612de6612e01565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610cca57600080fdfea26469706673582212203e775225b448f618734c61152aa333fa977b044c840407b098a3103ec0b5a70264736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5546726f575852534456687a7061595553444748504a6f5a587a67536d79485578314e5555665953776569450000000000000000000000

-----Decoded View---------------
Arg [0] : _initBaseURI (string):
Arg [1] : _initNotRevealedUri (string): ipfs://QmUFroWXRSDVhzpaYUSDGHPJoZXzgSmyHUx1NUUfYSweiE

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [4] : 697066733a2f2f516d5546726f575852534456687a7061595553444748504a6f
Arg [5] : 5a587a67536d79485578314e5555665953776569450000000000000000000000


Deployed Bytecode Sourcemap

43228:5998:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34769:224;;;;;;;;;;-1:-1:-1;34769:224:0;;;;;:::i;:::-;;:::i;:::-;;;9773:14:1;;9766:22;9748:41;;9736:2;9721:18;34769:224:0;;;;;;;;22661:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24220:221::-;;;;;;;;;;-1:-1:-1;24220:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8434:32:1;;;8416:51;;8404:2;8389:18;24220:221:0;8270:203:1;43639:28:0;;;;;;;;;;;;;:::i;23743:411::-;;;;;;;;;;-1:-1:-1;23743:411:0;;;;;:::i;:::-;;:::i;:::-;;43453:33;;;;;;;;;;;;;;;;;;;20707:25:1;;;20695:2;20680:18;43453:33:0;20561:177:1;35409:113:0;;;;;;;;;;-1:-1:-1;35497:10:0;:17;35409:113;;43416:32;;;;;;;;;;;;;;;;25110:339;;;;;;;;;;-1:-1:-1;25110:339:0;;;;;:::i;:::-;;:::i;35077:256::-;;;;;;;;;;-1:-1:-1;35077:256:0;;;;;:::i;:::-;;:::i;43729:41::-;;;;;;;;;;-1:-1:-1;43729:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;48464:93;;;;;;;;;;-1:-1:-1;48464:93:0;;;;;:::i;:::-;;:::i;49065:158::-;;;:::i;25520:185::-;;;;;;;;;;-1:-1:-1;25520:185:0;;;;;:::i;:::-;;:::i;46873:333::-;;;;;;;;;;-1:-1:-1;46873:333:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47808:82::-;;;;;;;;;;-1:-1:-1;47808:82:0;;;;;:::i;:::-;;:::i;48867:191::-;;;;;;;;;;-1:-1:-1;48867:191:0;;;;;:::i;:::-;;:::i;43346:32::-;;;;;;;;;;-1:-1:-1;43346:32:0;;;;-1:-1:-1;;;43346:32:0;;;;;;35599:233;;;;;;;;;;-1:-1:-1;35599:233:0;;;;;:::i;:::-;;:::i;43383:28::-;;;;;;;;;;-1:-1:-1;43383:28:0;;;;-1:-1:-1;;;43383:28:0;;;;;;48020:98;;;;;;;;;;-1:-1:-1;48020:98:0;;;;;:::i;:::-;;:::i;44179:756::-;;;:::i;43316:25::-;;;;;;;;;;-1:-1:-1;43316:25:0;;;;-1:-1:-1;;;43316:25:0;;;;;;22355:239;;;;;;;;;;-1:-1:-1;22355:239:0;;;;;:::i;:::-;;:::i;43571:21::-;;;;;;;;;;;;;:::i;22085:208::-;;;;;;;;;;-1:-1:-1;22085:208:0;;;;;:::i;:::-;;:::i;42566:94::-;;;;;;;;;;;;;:::i;47896:118::-;;;;;;;;;;-1:-1:-1;47896:118:0;;;;;:::i;:::-;;:::i;44955:994::-;;;;;;:::i;:::-;;:::i;41915:87::-;;;;;;;;;;-1:-1:-1;41988:6:0;;-1:-1:-1;;;;;41988:6:0;41915:87;;22830:104;;;;;;;;;;;;;:::i;45970:891::-;;;;;;:::i;:::-;;:::i;24513:295::-;;;;;;;;;;-1:-1:-1;24513:295:0;;;;;:::i;:::-;;:::i;47706:67::-;;;;;;;;;;;;;:::i;48701:158::-;;;;;;;;;;-1:-1:-1;48701:158:0;;;;;:::i;:::-;;:::i;25776:328::-;;;;;;;;;;-1:-1:-1;25776:328:0;;;;;:::i;:::-;;:::i;48380:76::-;;;;;;;;;;-1:-1:-1;48380:76:0;;;;;:::i;:::-;;:::i;43597:37::-;;;;;;;;;;;;;:::i;47212:472::-;;;;;;;;;;-1:-1:-1;47212:472:0;;;;;:::i;:::-;;:::i;43491:31::-;;;;;;;;;;;;;;;;48565:128;;;;;;;;;;-1:-1:-1;48565:128:0;;;;;:::i;:::-;;:::i;43527:39::-;;;;;;;;;;;;;;;;48124:122;;;;;;;;;;-1:-1:-1;48124:122:0;;;;;:::i;:::-;;:::i;24879:164::-;;;;;;;;;;-1:-1:-1;24879:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;25000:25:0;;;24976:4;25000:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24879:164;48254:120;;;;;;;;;;-1:-1:-1;48254:120:0;;;;;:::i;:::-;;:::i;42815:192::-;;;;;;;;;;-1:-1:-1;42815:192:0;;;;;:::i;:::-;;:::i;43775:46::-;;;;;;;;;;-1:-1:-1;43775:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;34769:224;34871:4;-1:-1:-1;;;;;;34895:50:0;;-1:-1:-1;;;34895:50:0;;:90;;;34949:36;34973:11;34949:23;:36::i;:::-;34888:97;34769:224;-1:-1:-1;;34769:224:0:o;22661:100::-;22715:13;22748:5;22741:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22661:100;:::o;24220:221::-;24296:7;27703:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27703:16:0;24316:73;;;;-1:-1:-1;;;24316:73:0;;16121:2:1;24316:73:0;;;16103:21:1;16160:2;16140:18;;;16133:30;16199:34;16179:18;;;16172:62;-1:-1:-1;;;16250:18:1;;;16243:42;16302:19;;24316:73:0;;;;;;;;;-1:-1:-1;24409:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24409:24:0;;24220:221::o;43639:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23743:411::-;23824:13;23840:23;23855:7;23840:14;:23::i;:::-;23824:39;;23888:5;-1:-1:-1;;;;;23882:11:0;:2;-1:-1:-1;;;;;23882:11:0;;;23874:57;;;;-1:-1:-1;;;23874:57:0;;18072:2:1;23874:57:0;;;18054:21:1;18111:2;18091:18;;;18084:30;18150:34;18130:18;;;18123:62;-1:-1:-1;;;18201:18:1;;;18194:31;18242:19;;23874:57:0;17870:397:1;23874:57:0;20268:10;-1:-1:-1;;;;;23966:21:0;;;;:62;;-1:-1:-1;23991:37:0;24008:5;20268:10;24879:164;:::i;23991:37::-;23944:168;;;;-1:-1:-1;;;23944:168:0;;14163:2:1;23944:168:0;;;14145:21:1;14202:2;14182:18;;;14175:30;14241:34;14221:18;;;14214:62;14312:26;14292:18;;;14285:54;14356:19;;23944:168:0;13961:420:1;23944:168:0;24125:21;24134:2;24138:7;24125:8;:21::i;:::-;23813:341;23743:411;;:::o;25110:339::-;25305:41;20268:10;25338:7;25305:18;:41::i;:::-;25297:103;;;;-1:-1:-1;;;25297:103:0;;;;;;;:::i;:::-;25413:28;25423:4;25429:2;25433:7;25413:9;:28::i;35077:256::-;35174:7;35210:23;35227:5;35210:16;:23::i;:::-;35202:5;:31;35194:87;;;;-1:-1:-1;;;35194:87:0;;10632:2:1;35194:87:0;;;10614:21:1;10671:2;10651:18;;;10644:30;10710:34;10690:18;;;10683:62;-1:-1:-1;;;10761:18:1;;;10754:41;10812:19;;35194:87:0;10430:407:1;35194:87:0;-1:-1:-1;;;;;;35299:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;35077:256::o;48464:93::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;48529:13:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;48529:22:0::1;-1:-1:-1::0;;;;48529:22:0;;::::1;::::0;;;::::1;::::0;;48464:93::o;49065:158::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;49136:58:::1;::::0;49118:12:::1;::::0;49144:10:::1;::::0;49168:21:::1;::::0;49118:12;49136:58;49118:12;49136:58;49168:21;49144:10;49136:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49117:77;;;49209:7;49201:16;;;::::0;::::1;;49110:113;49065:158::o:0;25520:185::-;25658:39;25675:4;25681:2;25685:7;25658:39;;;;;;;;;;;;:16;:39::i;46873:333::-;46933:16;46961:23;46987:17;46997:6;46987:9;:17::i;:::-;46961:43;;47011:25;47053:15;47039:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47039:30:0;;47011:58;;47081:9;47076:103;47096:15;47092:1;:19;47076:103;;;47141:30;47161:6;47169:1;47141:19;:30::i;:::-;47127:8;47136:1;47127:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;47113:3;;;;:::i;:::-;;;;47076:103;;;-1:-1:-1;47192:8:0;46873:333;-1:-1:-1;;;46873:333:0:o;47808:82::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;47869:4:::1;:15:::0;47808:82::o;48867:191::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;48974:9:::1;48969:83;48993:8;:15;48989:1;:19;48969:83;;;49042:7;49050:1;49042:10;;;;;;;;:::i;:::-;;;;;;;49015:11;:24;49027:8;49036:1;49027:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;49015:24:0::1;-1:-1:-1::0;;;;;49015:24:0::1;;;;;;;;;;;;:37;;;;49010:3;;;;;:::i;:::-;;;;48969:83;;35599:233:::0;35674:7;35710:30;35497:10;:17;;35409:113;35710:30;35702:5;:38;35694:95;;;;-1:-1:-1;;;35694:95:0;;19642:2:1;35694:95:0;;;19624:21:1;19681:2;19661:18;;;19654:30;19720:34;19700:18;;;19693:62;-1:-1:-1;;;19771:18:1;;;19764:42;19823:19;;35694:95:0;19440:408:1;35694:95:0;35807:10;35818:5;35807:17;;;;;;;;:::i;:::-;;;;;;;;;35800:24;;35599:233;;;:::o;48020:98::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;48091:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;48020:98:::0;:::o;44179:756::-;44258:10;44221:22;44246:23;;;:11;:23;;;;;;;44293:13;35497:10;:17;;35409:113;44293:13;44324:6;;44276:30;;-1:-1:-1;;;;44324:6:0;;;;44323:7;44315:97;;;;-1:-1:-1;;;44315:97:0;;;;;;;:::i;:::-;44444:1;44427:14;:18;44419:112;;;;-1:-1:-1;;;44419:112:0;;10226:2:1;44419:112:0;;;10208:21:1;10265:2;10245:18;;;10238:30;10304:34;10284:18;;;10277:62;-1:-1:-1;;;10355:18:1;;;10348:35;10400:19;;44419:112:0;10024:401:1;44419:112:0;44573:9;;44546:23;44555:14;44546:6;:23;:::i;:::-;:36;;44538:97;;;;-1:-1:-1;;;44538:97:0;;;;;;;:::i;:::-;44699:13;;44667:10;44650:28;;;;:16;:28;;;;;;:45;;44681:14;;44650:45;:::i;:::-;:62;;44642:103;;;;-1:-1:-1;;;44642:103:0;;;;;;;:::i;:::-;44771:1;44754:79;44779:14;44774:1;:19;44754:79;;44800:33;44810:10;44822;44831:1;44822:6;:10;:::i;:::-;44800:9;:33::i;:::-;44795:3;;;;:::i;:::-;;;;44754:79;;;-1:-1:-1;44859:10:0;44847:23;;;;:11;:23;;;;;;;;44840:30;;;44883:16;:28;;;;;:46;;44915:14;;44847:23;44883:46;;44915:14;;44883:46;:::i;:::-;;;;-1:-1:-1;;;;44179:756:0:o;22355:239::-;22427:7;22463:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22463:16:0;22498:19;22490:73;;;;-1:-1:-1;;;22490:73:0;;14999:2:1;22490:73:0;;;14981:21:1;15038:2;15018:18;;;15011:30;15077:34;15057:18;;;15050:62;-1:-1:-1;;;15128:18:1;;;15121:39;15177:19;;22490:73:0;14797:405:1;43571:21:0;;;;;;;:::i;22085:208::-;22157:7;-1:-1:-1;;;;;22185:19:0;;22177:74;;;;-1:-1:-1;;;22177:74:0;;14588:2:1;22177:74:0;;;14570:21:1;14627:2;14607:18;;;14600:30;14666:34;14646:18;;;14639:62;-1:-1:-1;;;14717:18:1;;;14710:40;14767:19;;22177:74:0;14386:406:1;22177:74:0;-1:-1:-1;;;;;;22269:16:0;;;;;:9;:16;;;;;;;22085:208::o;42566:94::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;42631:21:::1;42649:1;42631:9;:21::i;:::-;42566:94::o:0;47896:118::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;47975:13:::1;:33:::0;47896:118::o;44955:994::-;45018:14;45035:13;35497:10;:17;;35409:113;45035:13;45064:6;;45018:30;;-1:-1:-1;;;;45064:6:0;;;;45063:7;45055:97;;;;-1:-1:-1;;;45055:97:0;;;;;;;:::i;:::-;45181:1;45167:11;:15;45159:102;;;;-1:-1:-1;;;45159:102:0;;20407:2:1;45159:102:0;;;20389:21:1;20446:2;20426:18;;;20419:30;20485:29;20465:18;;;20458:57;20532:18;;45159:102:0;20205:351:1;45159:102:0;45300:9;;45276:20;45285:11;45276:6;:20;:::i;:::-;:33;;45268:97;;;;-1:-1:-1;;;45268:97:0;;;;;;;:::i;:::-;45426:13;;45397:10;45380:28;;;;:16;:28;;;;;;:42;;45411:11;;45380:42;:::i;:::-;:59;;45372:103;;;;-1:-1:-1;;;45372:103:0;;;;;;;:::i;:::-;45520:17;;45496:20;45505:11;45496:6;:20;:::i;:::-;:41;;45488:109;;;;-1:-1:-1;;;45488:109:0;;18474:2:1;45488:109:0;;;18456:21:1;18513:2;18493:18;;;18486:30;18552:34;18532:18;;;18525:62;-1:-1:-1;;;18603:18:1;;;18596:32;18645:19;;45488:109:0;18272:398:1;45488:109:0;45622:10;45612:21;;;;:9;:21;;;;;;;;45604:98;;;;-1:-1:-1;;;45604:98:0;;20055:2:1;45604:98:0;;;20037:21:1;20094:2;20074:18;;;20067:30;20133:25;20113:18;;;20106:53;20176:18;;45604:98:0;19853:347:1;45604:98:0;45737:11;45730:4;;:18;;;;:::i;:::-;45717:9;:31;;45709:93;;;;-1:-1:-1;;;45709:93:0;;18877:2:1;45709:93:0;;;18859:21:1;18916:2;18896:18;;;18889:30;-1:-1:-1;;;18935:18:1;;;18928:48;18993:18;;45709:93:0;18675:342:1;45709:93:0;45828:1;45811:76;45836:11;45831:1;:16;45811:76;;45854:33;45864:10;45876;45885:1;45876:6;:10;:::i;45854:33::-;45849:3;;;;:::i;:::-;;;;45811:76;;;-1:-1:-1;45917:10:0;45900:28;;;;:16;:28;;;;;:43;;45932:11;;45900:28;:43;;45932:11;;45900:43;:::i;22830:104::-;22886:13;22919:7;22912:14;;;;;:::i;45970:891::-;46027:14;46044:13;35497:10;:17;;35409:113;46044:13;46073:6;;46027:30;;-1:-1:-1;;;;46073:6:0;;;;46072:7;46064:97;;;;-1:-1:-1;;;46064:97:0;;;;;;;:::i;:::-;46177:13;;-1:-1:-1;;;46177:13:0;;;;46176:14;46168:113;;;;-1:-1:-1;;;46168:113:0;;13343:2:1;46168:113:0;;;13325:21:1;13382:2;13362:18;;;13355:30;13421:34;13401:18;;;13394:62;-1:-1:-1;;;13472:18:1;;;13465:36;13518:19;;46168:113:0;13141:402:1;46168:113:0;46310:1;46296:11;:15;46288:102;;;;-1:-1:-1;;;46288:102:0;;20407:2:1;46288:102:0;;;20389:21:1;20446:2;20426:18;;;20419:30;20485:29;20465:18;;;20458:57;20532:18;;46288:102:0;20205:351:1;46288:102:0;46429:9;;46405:20;46414:11;46405:6;:20;:::i;:::-;:33;;46397:97;;;;-1:-1:-1;;;46397:97:0;;;;;;;:::i;:::-;46555:13;;46526:10;46509:28;;;;:16;:28;;;;;;:42;;46540:11;;46509:42;:::i;:::-;:59;;46501:103;;;;-1:-1:-1;;;46501:103:0;;;;;;;:::i;:::-;46645:11;46638:4;;:18;;;;:::i;:::-;46625:9;:31;;46617:93;;;;-1:-1:-1;;;46617:93:0;;18877:2:1;46617:93:0;;;18859:21:1;18916:2;18896:18;;;18889:30;-1:-1:-1;;;18935:18:1;;;18928:48;18993:18;;46617:93:0;18675:342:1;46617:93:0;46740:1;46723:76;46748:11;46743:1;:16;46723:76;;46766:33;46776:10;46788;46797:1;46788:6;:10;:::i;46766:33::-;46761:3;;;;:::i;:::-;;;;46723:76;;24513:295;-1:-1:-1;;;;;24616:24:0;;20268:10;24616:24;;24608:62;;;;-1:-1:-1;;;24608:62:0;;12989:2:1;24608:62:0;;;12971:21:1;13028:2;13008:18;;;13001:30;13067:27;13047:18;;;13040:55;13112:18;;24608:62:0;12787:349:1;24608:62:0;20268:10;24683:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;24683:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;24683:53:0;;;;;;;;;;24752:48;;9748:41:1;;;24683:42:0;;20268:10;24752:48;;9721:18:1;24752:48:0;;;;;;;24513:295;;:::o;47706:67::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;47752:8:::1;:15:::0;;-1:-1:-1;;;;47752:15:0::1;-1:-1:-1::0;;;47752:15:0::1;::::0;;47706:67::o;48701:158::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;48783:9:::1;48778:75;48802:8;:15;48798:1;:19;48778:75;;;48849:4;48824:9;:22;48834:8;48843:1;48834:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;48824:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;48824:22:0;:29;;-1:-1:-1;;48824:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48819:3;::::1;::::0;::::1;:::i;:::-;;;;48778:75;;25776:328:::0;25951:41;20268:10;25984:7;25951:18;:41::i;:::-;25943:103;;;;-1:-1:-1;;;25943:103:0;;;;;;;:::i;:::-;26057:39;26071:4;26077:2;26081:7;26090:5;26057:13;:39::i;:::-;25776:328;;;;:::o;48380:76::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;48435:6:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;48435:15:0::1;-1:-1:-1::0;;;;48435:15:0;;::::1;::::0;;;::::1;::::0;;48380:76::o;43597:37::-;;;;;;;:::i;47212:472::-;27679:4;27703:16;;;:7;:16;;;;;;47285:13;;-1:-1:-1;;;;;27703:16:0;47310:97;;;;-1:-1:-1;;;47310:97:0;;17656:2:1;47310:97:0;;;17638:21:1;17695:2;17675:18;;;17668:30;17734:34;17714:18;;;17707:62;-1:-1:-1;;;17785:18:1;;;17778:45;17840:19;;47310:97:0;17454:411:1;47310:97:0;47423:8;;-1:-1:-1;;;47423:8:0;;;;47420:62;;47460:14;47453:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47212:472;;;:::o;47420:62::-;47490:28;47521:10;:8;:10::i;:::-;47490:41;;47576:1;47551:14;47545:28;:32;:133;;;;;;;;;;;;;;;;;47613:14;47629:18;:7;:16;:18::i;:::-;47649:13;47596:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47545:133;47538:140;47212:472;-1:-1:-1;;;47212:472:0:o;48565:128::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;48649:17:::1;:38:::0;48565:128::o;48124:122::-;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;48207:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;48254:120::-:0;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;48336:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;42815:192::-:0;41988:6;;-1:-1:-1;;;;;41988:6:0;20268:10;42135:23;42127:68;;;;-1:-1:-1;;;42127:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42904:22:0;::::1;42896:73;;;::::0;-1:-1:-1;;;42896:73:0;;11463:2:1;42896:73:0::1;::::0;::::1;11445:21:1::0;11502:2;11482:18;;;11475:30;11541:34;11521:18;;;11514:62;-1:-1:-1;;;11592:18:1;;;11585:36;11638:19;;42896:73:0::1;11261:402:1::0;42896:73:0::1;42980:19;42990:8;42980:9;:19::i;21716:305::-:0;21818:4;-1:-1:-1;;;;;;21855:40:0;;-1:-1:-1;;;21855:40:0;;:105;;-1:-1:-1;;;;;;;21912:48:0;;-1:-1:-1;;;21912:48:0;21855:105;:158;;;-1:-1:-1;;;;;;;;;;7646:40:0;;;21977:36;7537:157;31596:174;31671:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31671:29:0;-1:-1:-1;;;;;31671:29:0;;;;;;;;:24;;31725:23;31671:24;31725:14;:23::i;:::-;-1:-1:-1;;;;;31716:46:0;;;;;;;;;;;31596:174;;:::o;27908:348::-;28001:4;27703:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27703:16:0;28018:73;;;;-1:-1:-1;;;28018:73:0;;13750:2:1;28018:73:0;;;13732:21:1;13789:2;13769:18;;;13762:30;13828:34;13808:18;;;13801:62;-1:-1:-1;;;13879:18:1;;;13872:42;13931:19;;28018:73:0;13548:408:1;28018:73:0;28102:13;28118:23;28133:7;28118:14;:23::i;:::-;28102:39;;28171:5;-1:-1:-1;;;;;28160:16:0;:7;-1:-1:-1;;;;;28160:16:0;;:51;;;;28204:7;-1:-1:-1;;;;;28180:31:0;:20;28192:7;28180:11;:20::i;:::-;-1:-1:-1;;;;;28180:31:0;;28160:51;:87;;;-1:-1:-1;;;;;;25000:25:0;;;24976:4;25000:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28215:32;28152:96;27908:348;-1:-1:-1;;;;27908:348:0:o;30900:578::-;31059:4;-1:-1:-1;;;;;31032:31:0;:23;31047:7;31032:14;:23::i;:::-;-1:-1:-1;;;;;31032:31:0;;31024:85;;;;-1:-1:-1;;;31024:85:0;;17246:2:1;31024:85:0;;;17228:21:1;17285:2;17265:18;;;17258:30;17324:34;17304:18;;;17297:62;-1:-1:-1;;;17375:18:1;;;17368:39;17424:19;;31024:85:0;17044:405:1;31024:85:0;-1:-1:-1;;;;;31128:16:0;;31120:65;;;;-1:-1:-1;;;31120:65:0;;12584:2:1;31120:65:0;;;12566:21:1;12623:2;12603:18;;;12596:30;12662:34;12642:18;;;12635:62;-1:-1:-1;;;12713:18:1;;;12706:34;12757:19;;31120:65:0;12382:400:1;31120:65:0;31198:39;31219:4;31225:2;31229:7;31198:20;:39::i;:::-;31302:29;31319:1;31323:7;31302:8;:29::i;:::-;-1:-1:-1;;;;;31344:15:0;;;;;;:9;:15;;;;;:20;;31363:1;;31344:15;:20;;31363:1;;31344:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31375:13:0;;;;;;:9;:13;;;;;:18;;31392:1;;31375:13;:18;;31392:1;;31375:18;:::i;:::-;;;;-1:-1:-1;;31404:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31404:21:0;-1:-1:-1;;;;;31404:21:0;;;;;;;;;31443:27;;31404:16;;31443:27;;;;;;;30900:578;;;:::o;28598:110::-;28674:26;28684:2;28688:7;28674:26;;;;;;;;;;;;:9;:26::i;43015:173::-;43090:6;;;-1:-1:-1;;;;;43107:17:0;;;-1:-1:-1;;;;;;43107:17:0;;;;;;;43140:40;;43090:6;;;43107:17;43090:6;;43140:40;;43071:16;;43140:40;43060:128;43015:173;:::o;26986:315::-;27143:28;27153:4;27159:2;27163:7;27143:9;:28::i;:::-;27190:48;27213:4;27219:2;27223:7;27232:5;27190:22;:48::i;:::-;27182:111;;;;-1:-1:-1;;;27182:111:0;;;;;;;:::i;44056:102::-;44116:13;44145:7;44138:14;;;;;:::i;8012:723::-;8068:13;8289:10;8285:53;;-1:-1:-1;;8316:10:0;;;;;;;;;;;;-1:-1:-1;;;8316:10:0;;;;;8012:723::o;8285:53::-;8363:5;8348:12;8404:78;8411:9;;8404:78;;8437:8;;;;:::i;:::-;;-1:-1:-1;8460:10:0;;-1:-1:-1;8468:2:0;8460:10;;:::i;:::-;;;8404:78;;;8492:19;8524:6;8514:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8514:17:0;;8492:39;;8542:154;8549:10;;8542:154;;8576:11;8586:1;8576:11;;:::i;:::-;;-1:-1:-1;8645:10:0;8653:2;8645:5;:10;:::i;:::-;8632:24;;:2;:24;:::i;:::-;8619:39;;8602:6;8609;8602:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8602:56:0;;;;;;;;-1:-1:-1;8673:11:0;8682:2;8673:11;;:::i;:::-;;;8542:154;;36445:589;-1:-1:-1;;;;;36651:18:0;;36647:187;;36686:40;36718:7;37861:10;:17;;37834:24;;;;:15;:24;;;;;:44;;;37889:24;;;;;;;;;;;;37757:164;36686:40;36647:187;;;36756:2;-1:-1:-1;;;;;36748:10:0;:4;-1:-1:-1;;;;;36748:10:0;;36744:90;;36775:47;36808:4;36814:7;36775:32;:47::i;:::-;-1:-1:-1;;;;;36848:16:0;;36844:183;;36881:45;36918:7;36881:36;:45::i;36844:183::-;36954:4;-1:-1:-1;;;;;36948:10:0;:2;-1:-1:-1;;;;;36948:10:0;;36944:83;;36975:40;37003:2;37007:7;36975:27;:40::i;28935:321::-;29065:18;29071:2;29075:7;29065:5;:18::i;:::-;29116:54;29147:1;29151:2;29155:7;29164:5;29116:22;:54::i;:::-;29094:154;;;;-1:-1:-1;;;29094:154:0;;;;;;;:::i;32335:799::-;32490:4;-1:-1:-1;;;;;32511:13:0;;10860:20;10908:8;32507:620;;32547:72;;-1:-1:-1;;;32547:72:0;;-1:-1:-1;;;;;32547:36:0;;;;;:72;;20268:10;;32598:4;;32604:7;;32613:5;;32547:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32547:72:0;;;;;;;;-1:-1:-1;;32547:72:0;;;;;;;;;;;;:::i;:::-;;;32543:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32789:13:0;;32785:272;;32832:60;;-1:-1:-1;;;32832:60:0;;;;;;;:::i;32785:272::-;33007:6;33001:13;32992:6;32988:2;32984:15;32977:38;32543:529;-1:-1:-1;;;;;;32670:51:0;-1:-1:-1;;;32670:51:0;;-1:-1:-1;32663:58:0;;32507:620;-1:-1:-1;33111:4:0;32335:799;;;;;;:::o;38548:988::-;38814:22;38864:1;38839:22;38856:4;38839:16;:22::i;:::-;:26;;;;:::i;:::-;38876:18;38897:26;;;:17;:26;;;;;;38814:51;;-1:-1:-1;39030:28:0;;;39026:328;;-1:-1:-1;;;;;39097:18:0;;39075:19;39097:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39148:30;;;;;;:44;;;39265:30;;:17;:30;;;;;:43;;;39026:328;-1:-1:-1;39450:26:0;;;;:17;:26;;;;;;;;39443:33;;;-1:-1:-1;;;;;39494:18:0;;;;;:12;:18;;;;;:34;;;;;;;39487:41;38548:988::o;39831:1079::-;40109:10;:17;40084:22;;40109:21;;40129:1;;40109:21;:::i;:::-;40141:18;40162:24;;;:15;:24;;;;;;40535:10;:26;;40084:46;;-1:-1:-1;40162:24:0;;40084:46;;40535:26;;;;;;:::i;:::-;;;;;;;;;40513:48;;40599:11;40574:10;40585;40574:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40679:28;;;:15;:28;;;;;;;:41;;;40851:24;;;;;40844:31;40886:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39902:1008;;;39831:1079;:::o;37335:221::-;37420:14;37437:20;37454:2;37437:16;:20::i;:::-;-1:-1:-1;;;;;37468:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37513:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37335:221:0:o;29592:382::-;-1:-1:-1;;;;;29672:16:0;;29664:61;;;;-1:-1:-1;;;29664:61:0;;15760:2:1;29664:61:0;;;15742:21:1;;;15779:18;;;15772:30;15838:34;15818:18;;;15811:62;15890:18;;29664:61:0;15558:356:1;29664:61:0;27679:4;27703:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27703:16:0;:30;29736:58;;;;-1:-1:-1;;;29736:58:0;;11870:2:1;29736:58:0;;;11852:21:1;11909:2;11889:18;;;11882:30;11948;11928:18;;;11921:58;11996:18;;29736:58:0;11668:352:1;29736:58:0;29807:45;29836:1;29840:2;29844:7;29807:20;:45::i;:::-;-1:-1:-1;;;;;29865:13:0;;;;;;:9;:13;;;;;:18;;29882:1;;29865:13;:18;;29882:1;;29865:18;:::i;:::-;;;;-1:-1:-1;;29894:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29894:21:0;-1:-1:-1;;;;;29894:21:0;;;;;;;;29933:33;;29894:16;;;29933:33;;29894:16;;29933:33;29592:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:679::-;657:5;710:3;703:4;695:6;691:17;687:27;677:55;;728:1;725;718:12;677:55;764:6;751:20;790:4;814:60;830:43;870:2;830:43;:::i;:::-;814:60;:::i;:::-;896:3;920:2;915:3;908:15;948:2;943:3;939:12;932:19;;983:2;975:6;971:15;1035:3;1030:2;1024;1021:1;1017:10;1009:6;1005:23;1001:32;998:41;995:61;;;1052:1;1049;1042:12;995:61;1074:1;1084:169;1098:2;1095:1;1092:9;1084:169;;;1155:23;1174:3;1155:23;:::i;:::-;1143:36;;1199:12;;;;1231;;;;1116:1;1109:9;1084:169;;;-1:-1:-1;1271:5:1;;603:679;-1:-1:-1;;;;;;;603:679:1:o;1287:160::-;1352:20;;1408:13;;1401:21;1391:32;;1381:60;;1437:1;1434;1427:12;1452:186;1511:6;1564:2;1552:9;1543:7;1539:23;1535:32;1532:52;;;1580:1;1577;1570:12;1532:52;1603:29;1622:9;1603:29;:::i;1643:260::-;1711:6;1719;1772:2;1760:9;1751:7;1747:23;1743:32;1740:52;;;1788:1;1785;1778:12;1740:52;1811:29;1830:9;1811:29;:::i;:::-;1801:39;;1859:38;1893:2;1882:9;1878:18;1859:38;:::i;:::-;1849:48;;1643:260;;;;;:::o;1908:328::-;1985:6;1993;2001;2054:2;2042:9;2033:7;2029:23;2025:32;2022:52;;;2070:1;2067;2060:12;2022:52;2093:29;2112:9;2093:29;:::i;:::-;2083:39;;2141:38;2175:2;2164:9;2160:18;2141:38;:::i;:::-;2131:48;;2226:2;2215:9;2211:18;2198:32;2188:42;;1908:328;;;;;:::o;2241:666::-;2336:6;2344;2352;2360;2413:3;2401:9;2392:7;2388:23;2384:33;2381:53;;;2430:1;2427;2420:12;2381:53;2453:29;2472:9;2453:29;:::i;:::-;2443:39;;2501:38;2535:2;2524:9;2520:18;2501:38;:::i;:::-;2491:48;;2586:2;2575:9;2571:18;2558:32;2548:42;;2641:2;2630:9;2626:18;2613:32;2668:18;2660:6;2657:30;2654:50;;;2700:1;2697;2690:12;2654:50;2723:22;;2776:4;2768:13;;2764:27;-1:-1:-1;2754:55:1;;2805:1;2802;2795:12;2754:55;2828:73;2893:7;2888:2;2875:16;2870:2;2866;2862:11;2828:73;:::i;:::-;2818:83;;;2241:666;;;;;;;:::o;2912:254::-;2977:6;2985;3038:2;3026:9;3017:7;3013:23;3009:32;3006:52;;;3054:1;3051;3044:12;3006:52;3077:29;3096:9;3077:29;:::i;:::-;3067:39;;3125:35;3156:2;3145:9;3141:18;3125:35;:::i;3171:254::-;3239:6;3247;3300:2;3288:9;3279:7;3275:23;3271:32;3268:52;;;3316:1;3313;3306:12;3268:52;3339:29;3358:9;3339:29;:::i;:::-;3329:39;3415:2;3400:18;;;;3387:32;;-1:-1:-1;;;3171:254:1:o;3430:348::-;3514:6;3567:2;3555:9;3546:7;3542:23;3538:32;3535:52;;;3583:1;3580;3573:12;3535:52;3623:9;3610:23;3656:18;3648:6;3645:30;3642:50;;;3688:1;3685;3678:12;3642:50;3711:61;3764:7;3755:6;3744:9;3740:22;3711:61;:::i;3783:1149::-;3901:6;3909;3962:2;3950:9;3941:7;3937:23;3933:32;3930:52;;;3978:1;3975;3968:12;3930:52;4018:9;4005:23;4047:18;4088:2;4080:6;4077:14;4074:34;;;4104:1;4101;4094:12;4074:34;4127:61;4180:7;4171:6;4160:9;4156:22;4127:61;:::i;:::-;4117:71;;4207:2;4197:12;;4262:2;4251:9;4247:18;4234:32;4291:2;4281:8;4278:16;4275:36;;;4307:1;4304;4297:12;4275:36;4330:24;;;-1:-1:-1;4385:4:1;4377:13;;4373:27;-1:-1:-1;4363:55:1;;4414:1;4411;4404:12;4363:55;4450:2;4437:16;4473:60;4489:43;4529:2;4489:43;:::i;4473:60::-;4555:3;4579:2;4574:3;4567:15;4607:2;4602:3;4598:12;4591:19;;4638:2;4634;4630:11;4686:7;4681:2;4675;4672:1;4668:10;4664:2;4660:19;4656:28;4653:41;4650:61;;;4707:1;4704;4697:12;4650:61;4729:1;4720:10;;4739:163;4753:2;4750:1;4747:9;4739:163;;;4810:17;;4798:30;;4771:1;4764:9;;;;;4848:12;;;;4880;;4739:163;;;4743:3;4921:5;4911:15;;;;;;;3783:1149;;;;;:::o;4937:180::-;4993:6;5046:2;5034:9;5025:7;5021:23;5017:32;5014:52;;;5062:1;5059;5052:12;5014:52;5085:26;5101:9;5085:26;:::i;5122:245::-;5180:6;5233:2;5221:9;5212:7;5208:23;5204:32;5201:52;;;5249:1;5246;5239:12;5201:52;5288:9;5275:23;5307:30;5331:5;5307:30;:::i;5372:249::-;5441:6;5494:2;5482:9;5473:7;5469:23;5465:32;5462:52;;;5510:1;5507;5500:12;5462:52;5542:9;5536:16;5561:30;5585:5;5561:30;:::i;5626:450::-;5695:6;5748:2;5736:9;5727:7;5723:23;5719:32;5716:52;;;5764:1;5761;5754:12;5716:52;5804:9;5791:23;5837:18;5829:6;5826:30;5823:50;;;5869:1;5866;5859:12;5823:50;5892:22;;5945:4;5937:13;;5933:27;-1:-1:-1;5923:55:1;;5974:1;5971;5964:12;5923:55;5997:73;6062:7;6057:2;6044:16;6039:2;6035;6031:11;5997:73;:::i;6081:180::-;6140:6;6193:2;6181:9;6172:7;6168:23;6164:32;6161:52;;;6209:1;6206;6199:12;6161:52;-1:-1:-1;6232:23:1;;6081:180;-1:-1:-1;6081:180:1:o;6266:257::-;6307:3;6345:5;6339:12;6372:6;6367:3;6360:19;6388:63;6444:6;6437:4;6432:3;6428:14;6421:4;6414:5;6410:16;6388:63;:::i;:::-;6505:2;6484:15;-1:-1:-1;;6480:29:1;6471:39;;;;6512:4;6467:50;;6266:257;-1:-1:-1;;6266:257:1:o;6528:1527::-;6752:3;6790:6;6784:13;6816:4;6829:51;6873:6;6868:3;6863:2;6855:6;6851:15;6829:51;:::i;:::-;6943:13;;6902:16;;;;6965:55;6943:13;6902:16;6987:15;;;6965:55;:::i;:::-;7109:13;;7042:20;;;7082:1;;7169;7191:18;;;;7244;;;;7271:93;;7349:4;7339:8;7335:19;7323:31;;7271:93;7412:2;7402:8;7399:16;7379:18;7376:40;7373:167;;;-1:-1:-1;;;7439:33:1;;7495:4;7492:1;7485:15;7525:4;7446:3;7513:17;7373:167;7556:18;7583:110;;;;7707:1;7702:328;;;;7549:481;;7583:110;-1:-1:-1;;7618:24:1;;7604:39;;7663:20;;;;-1:-1:-1;7583:110:1;;7702:328;21284:1;21277:14;;;21321:4;21308:18;;7797:1;7811:169;7825:8;7822:1;7819:15;7811:169;;;7907:14;;7892:13;;;7885:37;7950:16;;;;7842:10;;7811:169;;;7815:3;;8011:8;8004:5;8000:20;7993:27;;7549:481;-1:-1:-1;8046:3:1;;6528:1527;-1:-1:-1;;;;;;;;;;;6528:1527:1:o;8478:488::-;-1:-1:-1;;;;;8747:15:1;;;8729:34;;8799:15;;8794:2;8779:18;;8772:43;8846:2;8831:18;;8824:34;;;8894:3;8889:2;8874:18;;8867:31;;;8672:4;;8915:45;;8940:19;;8932:6;8915:45;:::i;:::-;8907:53;8478:488;-1:-1:-1;;;;;;8478:488:1:o;8971:632::-;9142:2;9194:21;;;9264:13;;9167:18;;;9286:22;;;9113:4;;9142:2;9365:15;;;;9339:2;9324:18;;;9113:4;9408:169;9422:6;9419:1;9416:13;9408:169;;;9483:13;;9471:26;;9552:15;;;;9517:12;;;;9444:1;9437:9;9408:169;;;-1:-1:-1;9594:3:1;;8971:632;-1:-1:-1;;;;;;8971:632:1:o;9800:219::-;9949:2;9938:9;9931:21;9912:4;9969:44;10009:2;9998:9;9994:18;9986:6;9969:44;:::i;10842:414::-;11044:2;11026:21;;;11083:2;11063:18;;;11056:30;11122:34;11117:2;11102:18;;11095:62;-1:-1:-1;;;11188:2:1;11173:18;;11166:48;11246:3;11231:19;;10842:414::o;12025:352::-;12227:2;12209:21;;;12266:2;12246:18;;;12239:30;12305;12300:2;12285:18;;12278:58;12368:2;12353:18;;12025:352::o;15207:346::-;15409:2;15391:21;;;15448:2;15428:18;;;15421:30;-1:-1:-1;;;15482:2:1;15467:18;;15460:52;15544:2;15529:18;;15207:346::o;16332:356::-;16534:2;16516:21;;;16553:18;;;16546:30;16612:34;16607:2;16592:18;;16585:62;16679:2;16664:18;;16332:356::o;16693:346::-;16895:2;16877:21;;;16934:2;16914:18;;;16907:30;-1:-1:-1;;;16968:2:1;16953:18;;16946:52;17030:2;17015:18;;16693:346::o;19022:413::-;19224:2;19206:21;;;19263:2;19243:18;;;19236:30;19302:34;19297:2;19282:18;;19275:62;-1:-1:-1;;;19368:2:1;19353:18;;19346:47;19425:3;19410:19;;19022:413::o;20743:275::-;20814:2;20808:9;20879:2;20860:13;;-1:-1:-1;;20856:27:1;20844:40;;20914:18;20899:34;;20935:22;;;20896:62;20893:88;;;20961:18;;:::i;:::-;20997:2;20990:22;20743:275;;-1:-1:-1;20743:275:1:o;21023:183::-;21083:4;21116:18;21108:6;21105:30;21102:56;;;21138:18;;:::i;:::-;-1:-1:-1;21183:1:1;21179:14;21195:4;21175:25;;21023:183::o;21337:128::-;21377:3;21408:1;21404:6;21401:1;21398:13;21395:39;;;21414:18;;:::i;:::-;-1:-1:-1;21450:9:1;;21337:128::o;21470:120::-;21510:1;21536;21526:35;;21541:18;;:::i;:::-;-1:-1:-1;21575:9:1;;21470:120::o;21595:168::-;21635:7;21701:1;21697;21693:6;21689:14;21686:1;21683:21;21678:1;21671:9;21664:17;21660:45;21657:71;;;21708:18;;:::i;:::-;-1:-1:-1;21748:9:1;;21595:168::o;21768:125::-;21808:4;21836:1;21833;21830:8;21827:34;;;21841:18;;:::i;:::-;-1:-1:-1;21878:9:1;;21768:125::o;21898:258::-;21970:1;21980:113;21994:6;21991:1;21988:13;21980:113;;;22070:11;;;22064:18;22051:11;;;22044:39;22016:2;22009:10;21980:113;;;22111:6;22108:1;22105:13;22102:48;;;-1:-1:-1;;22146:1:1;22128:16;;22121:27;21898:258::o;22161:380::-;22240:1;22236:12;;;;22283;;;22304:61;;22358:4;22350:6;22346:17;22336:27;;22304:61;22411:2;22403:6;22400:14;22380:18;22377:38;22374:161;;;22457:10;22452:3;22448:20;22445:1;22438:31;22492:4;22489:1;22482:15;22520:4;22517:1;22510:15;22374:161;;22161:380;;;:::o;22546:135::-;22585:3;-1:-1:-1;;22606:17:1;;22603:43;;;22626:18;;:::i;:::-;-1:-1:-1;22673:1:1;22662:13;;22546:135::o;22686:112::-;22718:1;22744;22734:35;;22749:18;;:::i;:::-;-1:-1:-1;22783:9:1;;22686:112::o;22803:127::-;22864:10;22859:3;22855:20;22852:1;22845:31;22895:4;22892:1;22885:15;22919:4;22916:1;22909:15;22935:127;22996:10;22991:3;22987:20;22984:1;22977:31;23027:4;23024:1;23017:15;23051:4;23048:1;23041:15;23067:127;23128:10;23123:3;23119:20;23116:1;23109:31;23159:4;23156:1;23149:15;23183:4;23180:1;23173:15;23199:127;23260:10;23255:3;23251:20;23248:1;23241:31;23291:4;23288:1;23281:15;23315:4;23312:1;23305:15;23331:127;23392:10;23387:3;23383:20;23380:1;23373:31;23423:4;23420:1;23413:15;23447:4;23444:1;23437:15;23463:131;-1:-1:-1;;;;;;23537:32:1;;23527:43;;23517:71;;23584:1;23581;23574:12

Swarm Source

ipfs://3e775225b448f618734c61152aa333fa977b044c840407b098a3103ec0b5a702
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.