ETH Price: $2,738.77 (-0.23%)

Token

Crypto Bloxs (CBLOX)
 

Overview

Max Total Supply

53 CBLOX

Holders

35

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
2 CBLOX
0x5b9ddceb15ee855fc54640b3179278eaa5a7a9c9
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:
CryptoBloxsNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-17
*/

//*****************************
// CRYPTO BLOXS SOLIDITY CONTRACT
//*****************************


// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Counters.sol

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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/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(to).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();
    }
}


pragma solidity ^0.8.0;

contract CryptoBloxsNFT  is ERC721Enumerable, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenId;
    Counters.Counter private _reserveId;

    uint256 constant MAX_SUPPlY = 788;
    uint256 constant RESERVE_COUNT = 100;
    uint256 constant PRESALE_SUPPLY = 100;
    uint256 constant MAX_ALLOWED = 10;
    uint256 constant MAX_PRESALE_ALLOWED = 4;
    
    
    uint256[] internal priceScale = [250000000000000000,250000000000000000,250000000000000000,250000000000000000,250000000000000000,
    250000000000000000,250000000000000000,250000000000000000]; 
  
    string baseTokenURI;
    bool public saleOpen = false;
    bool public presaleOpen = false;
    
    mapping(uint => string) public nftNames;
    event nftNameChange(address _by, uint tokenId, string _name);

    event NFTMinted(uint256 totalMinted);

    constructor(string memory baseURI) ERC721("Crypto Bloxs", "CBLOX") {
        setBaseURI(baseURI);
    }
    function setPresalePrice(uint256 newPrice) public onlyOwner {
        priceScale[0] = newPrice;
    }
    function setPrices(uint256[] calldata newPrices) public onlyOwner {
      for (uint256 i = 0; i < newPrices.length; i++) {
            if (i==priceScale.length) break;
            priceScale[i]=newPrices[i];
        } 
        
    }

    //Get token Ids of all tokens owned by _owner
    function walletOfOwner(address _owner)
        external
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }

        return tokensId;
    }

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


     //Close presale
    function pausePreSale() public onlyOwner {
        presaleOpen = false;
    }
    
     // open presale
    function unpausePreSale() public onlyOwner {
        presaleOpen = true;
    }
    
    //Close sale 
    function pauseSale() public onlyOwner {
        saleOpen = false;
    }
    
     // open sale
    function unpauseSale() public onlyOwner {
        saleOpen = true;
    }

    function withdrawAll() public onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }
    
    function currentPrice() public view returns (uint256) {
        return priceScale[_tokenId.current()/100];
    }
    
    //Presale mint NFT
    function presaleMintNFT(uint256 _count) public payable {
       
        if (msg.sender != owner()) {
            require(presaleOpen, "Presale paused");
        }
        
        require(
            _count > 0 && _count <= MAX_PRESALE_ALLOWED,
            "Max 4 NFTs per transaction"
        );
        require(
            _tokenId.current() < PRESALE_SUPPLY,
            "Presale sold out"
        );
               
        require(
            _tokenId.current() + _count <= PRESALE_SUPPLY,
            "Mint exceeds NFTs avaialble on Presale"
        );       
        
        require(
            msg.value >= priceScale[0] * _count,
            "Incorrect Ether sent"
        );

        address _to = msg.sender;

        for (uint256 i = 0; i < _count; i++) {
            _doMint(_to);
            
        }
       
    }

    //mint NFT
    function mintNFT(uint256 _count) public payable {
        if (msg.sender != owner()) {
            require(saleOpen, "Sale paused");
        }         
        
        require(
            _count > 0 && _count <= MAX_ALLOWED,
            "Max 10 NFTs can be minted per transaction"
        );        
        
        require(
            _tokenId.current() + _count <= MAX_SUPPlY,
            "Minting will exceed maximum supply"
        );                       
        
        require(
            msg.value >= currentPrice() * _count,
            "Incorrect Ether sent"
        );

        address _to = msg.sender;

        for (uint256 i = 0; i < _count; i++) {
            _doMint(_to);
        }
    }

    function airdrop(address[] calldata _recipients) external onlyOwner {
        require(_tokenId.current()  + _recipients.length <= MAX_SUPPlY,"Airdrop exceeds max supply");
        require(_recipients.length != 0, "No Address given");
        for (uint256 i = 0; i < _recipients.length; i++) {
            require(_recipients[i] != address(0), "Minting to Null address");            
            _doMint(_recipients[i]);
          
        }
    }
     function airdropMany(uint256 num, address _to) external onlyOwner {
        require(_tokenId.current() + num <= MAX_SUPPlY, "Airdrop exceeds max supply");
        for(uint256 i=0; i<num; i++){           
            _doMint(_to);
             
        }
    }

    function airdropRes(address[] calldata _recipients,uint[] calldata tokenid) external onlyOwner {
        require(
            _reserveId.current() + _recipients.length <= RESERVE_COUNT,
            "Airdrop exceeds maximum supply"
        );
        require(_recipients.length == tokenid.length, "No. of addresses and token ids should match");
        for (uint256 i = 0; i < _recipients.length; i++) {
            require(_recipients[i] != address(0), "Minting to Null address");
            require(tokenid[i] <= RESERVE_COUNT, "TokenId outside reserved range");
            resMint(_recipients[i],tokenid[i]);
        }
    }
    function resMint(address _to,uint tokenId) private {       
       _safeMint(_to, tokenId);
         _reserveId.increment();
        emit NFTMinted(tokenId);
    }
    function getResCount() external onlyOwner view returns (uint256 ) {
        return _reserveId.current();
    }
    function getMintCount() external view returns (uint256 ) {
        return _tokenId.current();
    }

    function _doMint(address _to) private {
        _tokenId.increment();
        uint256 tokenId = _tokenId.current()+RESERVE_COUNT;
        _safeMint(_to, tokenId);
        emit NFTMinted(tokenId);
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }
    
    function changeNFTName(uint tokenId, string memory _name) public {
        require(ownerOf(tokenId) == msg.sender, "Hey, your wallet doesn't own this!");
        require(sha256(bytes(_name)) != sha256(bytes(nftNames[tokenId])), "New name is same as the current one");
        nftNames[tokenId] = _name;
        
        emit nftNameChange(msg.sender, tokenId, _name);
        
    }
    
    function viewNFTName(uint tokenId) public view returns( string memory ){
        require( tokenId < totalSupply(), "Choose a token within range" );
        return nftNames[tokenId];
    }
    
    
    // GET ALL NFTs OF A WALLET AS AN ARRAY OF STRINGS. WOULD BE BETTER MAYBE IF IT RETURNED A STRUCT WITH ID-NAME MATCH
    function nftNamesOfOwner(address _owner) external view returns(string[] memory ) {
        uint256 tokenCount = balanceOf(_owner);
        if (tokenCount == 0) {
            // Return an empty array
            return new string[](0);
        } else {
            string[] memory result = new string[](tokenCount);
            uint256 index;
            for (index = 0; index < tokenCount; index++) {
                result[index] = nftNames[ tokenOfOwnerByIndex(_owner, index) ] ;
            }
            return result;
        }
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","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":false,"internalType":"uint256","name":"totalMinted","type":"uint256"}],"name":"NFTMinted","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_by","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"_name","type":"string"}],"name":"nftNameChange","type":"event"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"airdropMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"tokenid","type":"uint256[]"}],"name":"airdropRes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"_name","type":"string"}],"name":"changeNFTName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentPrice","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":[],"name":"getMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getResCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nftNamesOfOwner","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":"pausePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"presaleMintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newPrices","type":"uint256[]"}],"name":"setPrices","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":[],"name":"unpausePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"viewNFTName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6101806040526703782dace9d90000608081815260a082905260c082905260e0829052610100829052610120829052610140829052610160919091526200004b90600d906008620001eb565b50600f805461ffff191690553480156200006457600080fd5b50604051620037f6380380620037f68339810160408190526200008791620002da565b604080518082018252600c81526b43727970746f20426c6f787360a01b60208083019182528351808501909452600584526408684989eb60db1b908401528151919291620000d89160009162000246565b508051620000ee90600190602084019062000246565b5050506200010b620001056200011d60201b60201c565b62000121565b620001168162000173565b5062000409565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001e790600e90602084019062000246565b5050565b82805482825590600052602060002090810192821562000234579160200282015b828111156200023457825182906001600160401b03169055916020019190600101906200020c565b5062000242929150620002c3565b5090565b8280546200025490620003b6565b90600052602060002090601f01602090048101928262000278576000855562000234565b82601f106200029357805160ff191683800117855562000234565b8280016001018555821562000234579182015b8281111562000234578251825591602001919060010190620002a6565b5b80821115620002425760008155600101620002c4565b60006020808385031215620002ee57600080fd5b82516001600160401b03808211156200030657600080fd5b818501915085601f8301126200031b57600080fd5b815181811115620003305762000330620003f3565b604051601f8201601f19908116603f011681019083821181831017156200035b576200035b620003f3565b8160405282815288868487010111156200037457600080fd5b600093505b8284101562000398578484018601518185018701529285019262000379565b82841115620003aa5760008684830101525b98975050505050505050565b600181811c90821680620003cb57607f821691505b60208210811415620003ed57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6133dd80620004196000396000f3fe6080604052600436106102515760003560e01c806379cf92d311610139578063a22cb465116100b6578063bee6348a1161007a578063bee6348a14610690578063c87b56dd146106af578063e55185ff146106cf578063e985e9c5146106ef578063ead9b0ec14610738578063f2fde38b1461075857600080fd5b8063a22cb465146105ee578063a29ddac71461060e578063abf30f511461063b578063b88d4fde1461065b578063bb33d7291461067b57600080fd5b80638fc3b549116100fd5780638fc3b54914610582578063926427441461059757806395d89b41146105aa57806399288dbb146105bf5780639d1b464a146105d957600080fd5b806379cf92d3146104fa578063853828b61461051a57806385e5fc6b1461052f5780638971b0531461054f5780638da5cb5b1461056457600080fd5b80634357da58116101d257806355f804b31161019657806355f804b3146104455780636352211e1461046557806370a0823114610485578063715018a6146104a5578063729ad39e146104ba57806372eb2f9c146104da57600080fd5b80634357da58146103bb578063438b6300146103d05780634a8011d2146103fd5780634f6ccce71461041057806355367ba91461043057600080fd5b806323b872dd1161021957806323b872dd146103265780632f745c59146103465780633549345e1461036657806342842e0e1461038657806342d1e8f9146103a657600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad578063095ea7b3146102e557806318160ddd14610307575b600080fd5b34801561026257600080fd5b50610276610271366004612e2e565b610778565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a06107a3565b6040516102829190613146565b3480156102b957600080fd5b506102cd6102c8366004612e9d565b610835565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004612d3d565b6108cf565b005b34801561031357600080fd5b506008545b604051908152602001610282565b34801561033257600080fd5b50610305610341366004612c49565b6109e5565b34801561035257600080fd5b50610318610361366004612d3d565b610a16565b34801561037257600080fd5b50610305610381366004612e9d565b610aac565b34801561039257600080fd5b506103056103a1366004612c49565b610afa565b3480156103b257600080fd5b50610305610b15565b3480156103c757600080fd5b50610305610b50565b3480156103dc57600080fd5b506103f06103eb366004612bfb565b610b87565b6040516102829190613102565b61030561040b366004612e9d565b610c29565b34801561041c57600080fd5b5061031861042b366004612e9d565b610e35565b34801561043c57600080fd5b50610305610ec8565b34801561045157600080fd5b50610305610460366004612e68565b610efe565b34801561047157600080fd5b506102cd610480366004612e9d565b610f3f565b34801561049157600080fd5b506103186104a0366004612bfb565b610fb6565b3480156104b157600080fd5b5061030561103d565b3480156104c657600080fd5b506103056104d5366004612d67565b611073565b3480156104e657600080fd5b506103056104f5366004612eb6565b611208565b34801561050657600080fd5b50610305610515366004612d67565b6112bd565b34801561052657600080fd5b5061030561134b565b34801561053b57600080fd5b506102a061054a366004612e9d565b611403565b34801561055b57600080fd5b5061031861149d565b34801561057057600080fd5b50600a546001600160a01b03166102cd565b34801561058e57600080fd5b506103186114d6565b6103056105a5366004612e9d565b6114e1565b3480156105b657600080fd5b506102a0611692565b3480156105cb57600080fd5b50600f546102769060ff1681565b3480156105e557600080fd5b506103186116a1565b3480156105fa57600080fd5b50610305610609366004612d01565b6116da565b34801561061a57600080fd5b5061062e610629366004612bfb565b61179f565b60405161028291906130a0565b34801561064757600080fd5b506102a0610656366004612e9d565b61191c565b34801561066757600080fd5b50610305610676366004612c85565b611a13565b34801561068757600080fd5b50610305611a4b565b34801561069c57600080fd5b50600f5461027690610100900460ff1681565b3480156106bb57600080fd5b506102a06106ca366004612e9d565b611a84565b3480156106db57600080fd5b506103056106ea366004612ed9565b611b5f565b3480156106fb57600080fd5b5061027661070a366004612c16565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074457600080fd5b50610305610753366004612da9565b611d31565b34801561076457600080fd5b50610305610773366004612bfb565b611f71565b60006001600160e01b0319821663780e9d6360e01b148061079d575061079d82612009565b92915050565b6060600080546107b2906132bf565b80601f01602080910402602001604051908101604052809291908181526020018280546107de906132bf565b801561082b5780601f106108005761010080835404028352916020019161082b565b820191906000526020600020905b81548152906001019060200180831161080e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108b35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108da82610f3f565b9050806001600160a01b0316836001600160a01b031614156109485760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108aa565b336001600160a01b03821614806109645750610964813361070a565b6109d65760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108aa565b6109e08383612059565b505050565b6109ef33826120c7565b610a0b5760405162461bcd60e51b81526004016108aa906131e0565b6109e08383836121be565b6000610a2183610fb6565b8210610a835760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016108aa565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610ad65760405162461bcd60e51b81526004016108aa906131ab565b80600d600081548110610aeb57610aeb613365565b60009182526020909120015550565b6109e083838360405180602001604052806000815250611a13565b600a546001600160a01b03163314610b3f5760405162461bcd60e51b81526004016108aa906131ab565b600f805461ff001916610100179055565b600a546001600160a01b03163314610b7a5760405162461bcd60e51b81526004016108aa906131ab565b600f805461ff0019169055565b60606000610b9483610fb6565b905060008167ffffffffffffffff811115610bb157610bb161337b565b604051908082528060200260200182016040528015610bda578160200160208202803683370190505b50905060005b82811015610c2157610bf28582610a16565b828281518110610c0457610c04613365565b602090810291909101015280610c19816132f4565b915050610be0565b509392505050565b600a546001600160a01b03163314610c8357600f54610100900460ff16610c835760405162461bcd60e51b815260206004820152600e60248201526d141c995cd85b19481c185d5cd95960921b60448201526064016108aa565b600081118015610c94575060048111155b610ce05760405162461bcd60e51b815260206004820152601a60248201527f4d61782034204e46547320706572207472616e73616374696f6e00000000000060448201526064016108aa565b6064610ceb600b5490565b10610d2b5760405162461bcd60e51b815260206004820152601060248201526f141c995cd85b19481cdbdb19081bdd5d60821b60448201526064016108aa565b606481610d37600b5490565b610d419190613231565b1115610d9e5760405162461bcd60e51b815260206004820152602660248201527f4d696e742065786365656473204e4654732061766169616c626c65206f6e2050604482015265726573616c6560d01b60648201526084016108aa565b80600d600081548110610db357610db3613365565b9060005260206000200154610dc8919061325d565b341015610e0e5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd08115d1a195c881cd95b9d60621b60448201526064016108aa565b3360005b828110156109e057610e2382612369565b80610e2d816132f4565b915050610e12565b6000610e4060085490565b8210610ea35760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016108aa565b60088281548110610eb657610eb6613365565b90600052602060002001549050919050565b600a546001600160a01b03163314610ef25760405162461bcd60e51b81526004016108aa906131ab565b600f805460ff19169055565b600a546001600160a01b03163314610f285760405162461bcd60e51b81526004016108aa906131ab565b8051610f3b90600e906020840190612a64565b5050565b6000818152600260205260408120546001600160a01b03168061079d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108aa565b60006001600160a01b0382166110215760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108aa565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146110675760405162461bcd60e51b81526004016108aa906131ab565b61107160006123ca565b565b600a546001600160a01b0316331461109d5760405162461bcd60e51b81526004016108aa906131ab565b610314816110aa600b5490565b6110b49190613231565b11156111025760405162461bcd60e51b815260206004820152601a60248201527f41697264726f702065786365656473206d617820737570706c7900000000000060448201526064016108aa565b806111425760405162461bcd60e51b815260206004820152601060248201526f27379020b2323932b9b99033b4bb32b760811b60448201526064016108aa565b60005b818110156109e057600083838381811061116157611161613365565b90506020020160208101906111769190612bfb565b6001600160a01b031614156111c75760405162461bcd60e51b81526020600482015260176024820152764d696e74696e6720746f204e756c6c206164647265737360481b60448201526064016108aa565b6111f68383838181106111dc576111dc613365565b90506020020160208101906111f19190612bfb565b612369565b80611200816132f4565b915050611145565b600a546001600160a01b031633146112325760405162461bcd60e51b81526004016108aa906131ab565b6103148261123f600b5490565b6112499190613231565b11156112975760405162461bcd60e51b815260206004820152601a60248201527f41697264726f702065786365656473206d617820737570706c7900000000000060448201526064016108aa565b60005b828110156109e0576112ab82612369565b806112b5816132f4565b91505061129a565b600a546001600160a01b031633146112e75760405162461bcd60e51b81526004016108aa906131ab565b60005b818110156109e057600d5481141561130157505050565b82828281811061131357611313613365565b90506020020135600d828154811061132d5761132d613365565b60009182526020909120015580611343816132f4565b9150506112ea565b600a546001600160a01b031633146113755760405162461bcd60e51b81526004016108aa906131ab565b604051600090339047908381818185875af1925050503d80600081146113b7576040519150601f19603f3d011682016040523d82523d6000602084013e6113bc565b606091505b50509050806114005760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016108aa565b50565b6010602052600090815260409020805461141c906132bf565b80601f0160208091040260200160405190810160405280929190818152602001828054611448906132bf565b80156114955780601f1061146a57610100808354040283529160200191611495565b820191906000526020600020905b81548152906001019060200180831161147857829003601f168201915b505050505081565b600a546000906001600160a01b031633146114ca5760405162461bcd60e51b81526004016108aa906131ab565b50600c5490565b905090565b60006114d1600b5490565b600a546001600160a01b0316331461153357600f5460ff166115335760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b60448201526064016108aa565b6000811180156115445750600a8111155b6115a25760405162461bcd60e51b815260206004820152602960248201527f4d6178203130204e4654732063616e206265206d696e7465642070657220747260448201526830b739b0b1ba34b7b760b91b60648201526084016108aa565b610314816115af600b5490565b6115b99190613231565b11156116125760405162461bcd60e51b815260206004820152602260248201527f4d696e74696e672077696c6c20657863656564206d6178696d756d20737570706044820152616c7960f01b60648201526084016108aa565b8061161b6116a1565b611625919061325d565b34101561166b5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd08115d1a195c881cd95b9d60621b60448201526064016108aa565b3360005b828110156109e05761168082612369565b8061168a816132f4565b91505061166f565b6060600180546107b2906132bf565b6000600d60646116b0600b5490565b6116ba9190613249565b815481106116ca576116ca613365565b9060005260206000200154905090565b6001600160a01b0382163314156117335760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108aa565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b606060006117ac83610fb6565b9050806117e5576040805160008082526020820190925290610c21565b60608152602001906001900390816117c9579050509392505050565b60008167ffffffffffffffff8111156118005761180061337b565b60405190808252806020026020018201604052801561183357816020015b606081526020019060019003908161181e5790505b50905060005b82811015610c21576010600061184f8784610a16565b81526020019081526020016000208054611868906132bf565b80601f0160208091040260200160405190810160405280929190818152602001828054611894906132bf565b80156118e15780601f106118b6576101008083540402835291602001916118e1565b820191906000526020600020905b8154815290600101906020018083116118c457829003601f168201915b50505050508282815181106118f8576118f8613365565b6020026020010181905250808061190e906132f4565b915050611839565b50919050565b606061192760085490565b82106119755760405162461bcd60e51b815260206004820152601b60248201527f43686f6f7365206120746f6b656e2077697468696e2072616e6765000000000060448201526064016108aa565b6000828152601060205260409020805461198e906132bf565b80601f01602080910402602001604051908101604052809291908181526020018280546119ba906132bf565b8015611a075780601f106119dc57610100808354040283529160200191611a07565b820191906000526020600020905b8154815290600101906020018083116119ea57829003601f168201915b50505050509050919050565b611a1d33836120c7565b611a395760405162461bcd60e51b81526004016108aa906131e0565b611a458484848461241c565b50505050565b600a546001600160a01b03163314611a755760405162461bcd60e51b81526004016108aa906131ab565b600f805460ff19166001179055565b6000818152600260205260409020546060906001600160a01b0316611b035760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108aa565b6000611b0d61244f565b90506000815111611b2d5760405180602001604052806000815250611b58565b80611b378461245e565b604051602001611b48929190613004565b6040516020818303038152906040525b9392505050565b33611b6983610f3f565b6001600160a01b031614611bca5760405162461bcd60e51b815260206004820152602260248201527f4865792c20796f75722077616c6c657420646f65736e2774206f776e20746869604482015261732160f01b60648201526084016108aa565b600082815260106020526040908190209051600291611be891612f68565b602060405180830381855afa158015611c05573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611c289190612e15565b600282604051611c389190612f4c565b602060405180830381855afa158015611c55573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611c789190612e15565b1415611cd25760405162461bcd60e51b815260206004820152602360248201527f4e6577206e616d652069732073616d65206173207468652063757272656e74206044820152626f6e6560e81b60648201526084016108aa565b60008281526010602090815260409091208251611cf192840190612a64565b507fa33829fcab6d9de78b563b84b7db1144770a6168e15aa86deb58f14ab9a000ae338383604051611d2593929190613070565b60405180910390a15050565b600a546001600160a01b03163314611d5b5760405162461bcd60e51b81526004016108aa906131ab565b606483611d67600c5490565b611d719190613231565b1115611dbf5760405162461bcd60e51b815260206004820152601e60248201527f41697264726f702065786365656473206d6178696d756d20737570706c79000060448201526064016108aa565b828114611e225760405162461bcd60e51b815260206004820152602b60248201527f4e6f2e206f662061646472657373657320616e6420746f6b656e20696473207360448201526a0d0deead8c840dac2e8c6d60ab1b60648201526084016108aa565b60005b83811015611f6a576000858583818110611e4157611e41613365565b9050602002016020810190611e569190612bfb565b6001600160a01b03161415611ea75760405162461bcd60e51b81526020600482015260176024820152764d696e74696e6720746f204e756c6c206164647265737360481b60448201526064016108aa565b6064838383818110611ebb57611ebb613365565b905060200201351115611f105760405162461bcd60e51b815260206004820152601e60248201527f546f6b656e4964206f7574736964652072657365727665642072616e6765000060448201526064016108aa565b611f58858583818110611f2557611f25613365565b9050602002016020810190611f3a9190612bfb565b848484818110611f4c57611f4c613365565b9050602002013561255c565b80611f62816132f4565b915050611e25565b5050505050565b600a546001600160a01b03163314611f9b5760405162461bcd60e51b81526004016108aa906131ab565b6001600160a01b0381166120005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108aa565b611400816123ca565b60006001600160e01b031982166380ac58cd60e01b148061203a57506001600160e01b03198216635b5e139f60e01b145b8061079d57506301ffc9a760e01b6001600160e01b031983161461079d565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061208e82610f3f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166121405760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108aa565b600061214b83610f3f565b9050806001600160a01b0316846001600160a01b031614806121865750836001600160a01b031661217b84610835565b6001600160a01b0316145b806121b657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166121d182610f3f565b6001600160a01b0316146122395760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108aa565b6001600160a01b03821661229b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108aa565b6122a6838383612574565b6122b1600082612059565b6001600160a01b03831660009081526003602052604081208054600192906122da90849061327c565b90915550506001600160a01b0382166000908152600360205260408120805460019290612308908490613231565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612377600b80546001019055565b60006064612384600b5490565b61238e9190613231565b905061239a828261262c565b6040518181527fd9dc24857f317ed9abbbb42e920ede0104231eb1d3d70236a74887ffaf15986890602001611d25565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6124278484846121be565b61243384848484612646565b611a455760405162461bcd60e51b81526004016108aa90613159565b6060600e80546107b2906132bf565b6060816124825750506040805180820190915260018152600360fc1b602082015290565b8160005b81156124ac5780612496816132f4565b91506124a59050600a83613249565b9150612486565b60008167ffffffffffffffff8111156124c7576124c761337b565b6040519080825280601f01601f1916602001820160405280156124f1576020820181803683370190505b5090505b84156121b65761250660018361327c565b9150612513600a8661330f565b61251e906030613231565b60f81b81838151811061253357612533613365565b60200101906001600160f81b031916908160001a905350612555600a86613249565b94506124f5565b612566828261262c565b61239a600c80546001019055565b6001600160a01b0383166125cf576125ca81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6125f2565b816001600160a01b0316836001600160a01b0316146125f2576125f28382612753565b6001600160a01b038216612609576109e0816127f0565b826001600160a01b0316826001600160a01b0316146109e0576109e0828261289f565b610f3b8282604051806020016040528060008152506128e3565b60006001600160a01b0384163b1561274857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061268a903390899088908890600401613033565b602060405180830381600087803b1580156126a457600080fd5b505af19250505080156126d4575060408051601f3d908101601f191682019092526126d191810190612e4b565b60015b61272e573d808015612702576040519150601f19603f3d011682016040523d82523d6000602084013e612707565b606091505b5080516127265760405162461bcd60e51b81526004016108aa90613159565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121b6565b506001949350505050565b6000600161276084610fb6565b61276a919061327c565b6000838152600760205260409020549091508082146127bd576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906128029060019061327c565b6000838152600960205260408120546008805493945090928490811061282a5761282a613365565b90600052602060002001549050806008838154811061284b5761284b613365565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806128835761288361334f565b6001900381819060005260206000200160009055905550505050565b60006128aa83610fb6565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6128ed8383612916565b6128fa6000848484612646565b6109e05760405162461bcd60e51b81526004016108aa90613159565b6001600160a01b03821661296c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108aa565b6000818152600260205260409020546001600160a01b0316156129d15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108aa565b6129dd60008383612574565b6001600160a01b0382166000908152600360205260408120805460019290612a06908490613231565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612a70906132bf565b90600052602060002090601f016020900481019282612a925760008555612ad8565b82601f10612aab57805160ff1916838001178555612ad8565b82800160010185558215612ad8579182015b82811115612ad8578251825591602001919060010190612abd565b50612ae4929150612ae8565b5090565b5b80821115612ae45760008155600101612ae9565b600067ffffffffffffffff80841115612b1857612b1861337b565b604051601f8501601f19908116603f01168101908282118183101715612b4057612b4061337b565b81604052809350858152868686011115612b5957600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612b8a57600080fd5b919050565b60008083601f840112612ba157600080fd5b50813567ffffffffffffffff811115612bb957600080fd5b6020830191508360208260051b8501011115612bd457600080fd5b9250929050565b600082601f830112612bec57600080fd5b611b5883833560208501612afd565b600060208284031215612c0d57600080fd5b611b5882612b73565b60008060408385031215612c2957600080fd5b612c3283612b73565b9150612c4060208401612b73565b90509250929050565b600080600060608486031215612c5e57600080fd5b612c6784612b73565b9250612c7560208501612b73565b9150604084013590509250925092565b60008060008060808587031215612c9b57600080fd5b612ca485612b73565b9350612cb260208601612b73565b925060408501359150606085013567ffffffffffffffff811115612cd557600080fd5b8501601f81018713612ce657600080fd5b612cf587823560208401612afd565b91505092959194509250565b60008060408385031215612d1457600080fd5b612d1d83612b73565b915060208301358015158114612d3257600080fd5b809150509250929050565b60008060408385031215612d5057600080fd5b612d5983612b73565b946020939093013593505050565b60008060208385031215612d7a57600080fd5b823567ffffffffffffffff811115612d9157600080fd5b612d9d85828601612b8f565b90969095509350505050565b60008060008060408587031215612dbf57600080fd5b843567ffffffffffffffff80821115612dd757600080fd5b612de388838901612b8f565b90965094506020870135915080821115612dfc57600080fd5b50612e0987828801612b8f565b95989497509550505050565b600060208284031215612e2757600080fd5b5051919050565b600060208284031215612e4057600080fd5b8135611b5881613391565b600060208284031215612e5d57600080fd5b8151611b5881613391565b600060208284031215612e7a57600080fd5b813567ffffffffffffffff811115612e9157600080fd5b6121b684828501612bdb565b600060208284031215612eaf57600080fd5b5035919050565b60008060408385031215612ec957600080fd5b82359150612c4060208401612b73565b60008060408385031215612eec57600080fd5b82359150602083013567ffffffffffffffff811115612f0a57600080fd5b612f1685828601612bdb565b9150509250929050565b60008151808452612f38816020860160208601613293565b601f01601f19169290920160200192915050565b60008251612f5e818460208701613293565b9190910192915050565b600080835481600182811c915080831680612f8457607f831692505b6020808410821415612fa457634e487b7160e01b86526022600452602486fd5b818015612fb85760018114612fc957612ff6565b60ff19861689528489019650612ff6565b60008a81526020902060005b86811015612fee5781548b820152908501908301612fd5565b505084890196505b509498975050505050505050565b60008351613016818460208801613293565b83519083019061302a818360208801613293565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061306690830184612f20565b9695505050505050565b60018060a01b03841681528260208201526060604082015260006130976060830184612f20565b95945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156130f557603f198886030184526130e3858351612f20565b945092850192908501906001016130c7565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561313a5783518352928401929184019160010161311e565b50909695505050505050565b602081526000611b586020830184612f20565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561324457613244613323565b500190565b60008261325857613258613339565b500490565b600081600019048311821515161561327757613277613323565b500290565b60008282101561328e5761328e613323565b500390565b60005b838110156132ae578181015183820152602001613296565b83811115611a455750506000910152565b600181811c908216806132d357607f821691505b6020821081141561191657634e487b7160e01b600052602260045260246000fd5b600060001982141561330857613308613323565b5060010190565b60008261331e5761331e613339565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461140057600080fdfea2646970667358221220318c64c156a6b5aaa138c1e32d0a8b866da5db3f9bc9a3ed1439df57438d19a264736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f7777772e63727970746f626c6f78736e66742e636f6d2f6170692f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102515760003560e01c806379cf92d311610139578063a22cb465116100b6578063bee6348a1161007a578063bee6348a14610690578063c87b56dd146106af578063e55185ff146106cf578063e985e9c5146106ef578063ead9b0ec14610738578063f2fde38b1461075857600080fd5b8063a22cb465146105ee578063a29ddac71461060e578063abf30f511461063b578063b88d4fde1461065b578063bb33d7291461067b57600080fd5b80638fc3b549116100fd5780638fc3b54914610582578063926427441461059757806395d89b41146105aa57806399288dbb146105bf5780639d1b464a146105d957600080fd5b806379cf92d3146104fa578063853828b61461051a57806385e5fc6b1461052f5780638971b0531461054f5780638da5cb5b1461056457600080fd5b80634357da58116101d257806355f804b31161019657806355f804b3146104455780636352211e1461046557806370a0823114610485578063715018a6146104a5578063729ad39e146104ba57806372eb2f9c146104da57600080fd5b80634357da58146103bb578063438b6300146103d05780634a8011d2146103fd5780634f6ccce71461041057806355367ba91461043057600080fd5b806323b872dd1161021957806323b872dd146103265780632f745c59146103465780633549345e1461036657806342842e0e1461038657806342d1e8f9146103a657600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad578063095ea7b3146102e557806318160ddd14610307575b600080fd5b34801561026257600080fd5b50610276610271366004612e2e565b610778565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a06107a3565b6040516102829190613146565b3480156102b957600080fd5b506102cd6102c8366004612e9d565b610835565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004612d3d565b6108cf565b005b34801561031357600080fd5b506008545b604051908152602001610282565b34801561033257600080fd5b50610305610341366004612c49565b6109e5565b34801561035257600080fd5b50610318610361366004612d3d565b610a16565b34801561037257600080fd5b50610305610381366004612e9d565b610aac565b34801561039257600080fd5b506103056103a1366004612c49565b610afa565b3480156103b257600080fd5b50610305610b15565b3480156103c757600080fd5b50610305610b50565b3480156103dc57600080fd5b506103f06103eb366004612bfb565b610b87565b6040516102829190613102565b61030561040b366004612e9d565b610c29565b34801561041c57600080fd5b5061031861042b366004612e9d565b610e35565b34801561043c57600080fd5b50610305610ec8565b34801561045157600080fd5b50610305610460366004612e68565b610efe565b34801561047157600080fd5b506102cd610480366004612e9d565b610f3f565b34801561049157600080fd5b506103186104a0366004612bfb565b610fb6565b3480156104b157600080fd5b5061030561103d565b3480156104c657600080fd5b506103056104d5366004612d67565b611073565b3480156104e657600080fd5b506103056104f5366004612eb6565b611208565b34801561050657600080fd5b50610305610515366004612d67565b6112bd565b34801561052657600080fd5b5061030561134b565b34801561053b57600080fd5b506102a061054a366004612e9d565b611403565b34801561055b57600080fd5b5061031861149d565b34801561057057600080fd5b50600a546001600160a01b03166102cd565b34801561058e57600080fd5b506103186114d6565b6103056105a5366004612e9d565b6114e1565b3480156105b657600080fd5b506102a0611692565b3480156105cb57600080fd5b50600f546102769060ff1681565b3480156105e557600080fd5b506103186116a1565b3480156105fa57600080fd5b50610305610609366004612d01565b6116da565b34801561061a57600080fd5b5061062e610629366004612bfb565b61179f565b60405161028291906130a0565b34801561064757600080fd5b506102a0610656366004612e9d565b61191c565b34801561066757600080fd5b50610305610676366004612c85565b611a13565b34801561068757600080fd5b50610305611a4b565b34801561069c57600080fd5b50600f5461027690610100900460ff1681565b3480156106bb57600080fd5b506102a06106ca366004612e9d565b611a84565b3480156106db57600080fd5b506103056106ea366004612ed9565b611b5f565b3480156106fb57600080fd5b5061027661070a366004612c16565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074457600080fd5b50610305610753366004612da9565b611d31565b34801561076457600080fd5b50610305610773366004612bfb565b611f71565b60006001600160e01b0319821663780e9d6360e01b148061079d575061079d82612009565b92915050565b6060600080546107b2906132bf565b80601f01602080910402602001604051908101604052809291908181526020018280546107de906132bf565b801561082b5780601f106108005761010080835404028352916020019161082b565b820191906000526020600020905b81548152906001019060200180831161080e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108b35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108da82610f3f565b9050806001600160a01b0316836001600160a01b031614156109485760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108aa565b336001600160a01b03821614806109645750610964813361070a565b6109d65760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108aa565b6109e08383612059565b505050565b6109ef33826120c7565b610a0b5760405162461bcd60e51b81526004016108aa906131e0565b6109e08383836121be565b6000610a2183610fb6565b8210610a835760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016108aa565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610ad65760405162461bcd60e51b81526004016108aa906131ab565b80600d600081548110610aeb57610aeb613365565b60009182526020909120015550565b6109e083838360405180602001604052806000815250611a13565b600a546001600160a01b03163314610b3f5760405162461bcd60e51b81526004016108aa906131ab565b600f805461ff001916610100179055565b600a546001600160a01b03163314610b7a5760405162461bcd60e51b81526004016108aa906131ab565b600f805461ff0019169055565b60606000610b9483610fb6565b905060008167ffffffffffffffff811115610bb157610bb161337b565b604051908082528060200260200182016040528015610bda578160200160208202803683370190505b50905060005b82811015610c2157610bf28582610a16565b828281518110610c0457610c04613365565b602090810291909101015280610c19816132f4565b915050610be0565b509392505050565b600a546001600160a01b03163314610c8357600f54610100900460ff16610c835760405162461bcd60e51b815260206004820152600e60248201526d141c995cd85b19481c185d5cd95960921b60448201526064016108aa565b600081118015610c94575060048111155b610ce05760405162461bcd60e51b815260206004820152601a60248201527f4d61782034204e46547320706572207472616e73616374696f6e00000000000060448201526064016108aa565b6064610ceb600b5490565b10610d2b5760405162461bcd60e51b815260206004820152601060248201526f141c995cd85b19481cdbdb19081bdd5d60821b60448201526064016108aa565b606481610d37600b5490565b610d419190613231565b1115610d9e5760405162461bcd60e51b815260206004820152602660248201527f4d696e742065786365656473204e4654732061766169616c626c65206f6e2050604482015265726573616c6560d01b60648201526084016108aa565b80600d600081548110610db357610db3613365565b9060005260206000200154610dc8919061325d565b341015610e0e5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd08115d1a195c881cd95b9d60621b60448201526064016108aa565b3360005b828110156109e057610e2382612369565b80610e2d816132f4565b915050610e12565b6000610e4060085490565b8210610ea35760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016108aa565b60088281548110610eb657610eb6613365565b90600052602060002001549050919050565b600a546001600160a01b03163314610ef25760405162461bcd60e51b81526004016108aa906131ab565b600f805460ff19169055565b600a546001600160a01b03163314610f285760405162461bcd60e51b81526004016108aa906131ab565b8051610f3b90600e906020840190612a64565b5050565b6000818152600260205260408120546001600160a01b03168061079d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108aa565b60006001600160a01b0382166110215760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108aa565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146110675760405162461bcd60e51b81526004016108aa906131ab565b61107160006123ca565b565b600a546001600160a01b0316331461109d5760405162461bcd60e51b81526004016108aa906131ab565b610314816110aa600b5490565b6110b49190613231565b11156111025760405162461bcd60e51b815260206004820152601a60248201527f41697264726f702065786365656473206d617820737570706c7900000000000060448201526064016108aa565b806111425760405162461bcd60e51b815260206004820152601060248201526f27379020b2323932b9b99033b4bb32b760811b60448201526064016108aa565b60005b818110156109e057600083838381811061116157611161613365565b90506020020160208101906111769190612bfb565b6001600160a01b031614156111c75760405162461bcd60e51b81526020600482015260176024820152764d696e74696e6720746f204e756c6c206164647265737360481b60448201526064016108aa565b6111f68383838181106111dc576111dc613365565b90506020020160208101906111f19190612bfb565b612369565b80611200816132f4565b915050611145565b600a546001600160a01b031633146112325760405162461bcd60e51b81526004016108aa906131ab565b6103148261123f600b5490565b6112499190613231565b11156112975760405162461bcd60e51b815260206004820152601a60248201527f41697264726f702065786365656473206d617820737570706c7900000000000060448201526064016108aa565b60005b828110156109e0576112ab82612369565b806112b5816132f4565b91505061129a565b600a546001600160a01b031633146112e75760405162461bcd60e51b81526004016108aa906131ab565b60005b818110156109e057600d5481141561130157505050565b82828281811061131357611313613365565b90506020020135600d828154811061132d5761132d613365565b60009182526020909120015580611343816132f4565b9150506112ea565b600a546001600160a01b031633146113755760405162461bcd60e51b81526004016108aa906131ab565b604051600090339047908381818185875af1925050503d80600081146113b7576040519150601f19603f3d011682016040523d82523d6000602084013e6113bc565b606091505b50509050806114005760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016108aa565b50565b6010602052600090815260409020805461141c906132bf565b80601f0160208091040260200160405190810160405280929190818152602001828054611448906132bf565b80156114955780601f1061146a57610100808354040283529160200191611495565b820191906000526020600020905b81548152906001019060200180831161147857829003601f168201915b505050505081565b600a546000906001600160a01b031633146114ca5760405162461bcd60e51b81526004016108aa906131ab565b50600c5490565b905090565b60006114d1600b5490565b600a546001600160a01b0316331461153357600f5460ff166115335760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b60448201526064016108aa565b6000811180156115445750600a8111155b6115a25760405162461bcd60e51b815260206004820152602960248201527f4d6178203130204e4654732063616e206265206d696e7465642070657220747260448201526830b739b0b1ba34b7b760b91b60648201526084016108aa565b610314816115af600b5490565b6115b99190613231565b11156116125760405162461bcd60e51b815260206004820152602260248201527f4d696e74696e672077696c6c20657863656564206d6178696d756d20737570706044820152616c7960f01b60648201526084016108aa565b8061161b6116a1565b611625919061325d565b34101561166b5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd08115d1a195c881cd95b9d60621b60448201526064016108aa565b3360005b828110156109e05761168082612369565b8061168a816132f4565b91505061166f565b6060600180546107b2906132bf565b6000600d60646116b0600b5490565b6116ba9190613249565b815481106116ca576116ca613365565b9060005260206000200154905090565b6001600160a01b0382163314156117335760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108aa565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b606060006117ac83610fb6565b9050806117e5576040805160008082526020820190925290610c21565b60608152602001906001900390816117c9579050509392505050565b60008167ffffffffffffffff8111156118005761180061337b565b60405190808252806020026020018201604052801561183357816020015b606081526020019060019003908161181e5790505b50905060005b82811015610c21576010600061184f8784610a16565b81526020019081526020016000208054611868906132bf565b80601f0160208091040260200160405190810160405280929190818152602001828054611894906132bf565b80156118e15780601f106118b6576101008083540402835291602001916118e1565b820191906000526020600020905b8154815290600101906020018083116118c457829003601f168201915b50505050508282815181106118f8576118f8613365565b6020026020010181905250808061190e906132f4565b915050611839565b50919050565b606061192760085490565b82106119755760405162461bcd60e51b815260206004820152601b60248201527f43686f6f7365206120746f6b656e2077697468696e2072616e6765000000000060448201526064016108aa565b6000828152601060205260409020805461198e906132bf565b80601f01602080910402602001604051908101604052809291908181526020018280546119ba906132bf565b8015611a075780601f106119dc57610100808354040283529160200191611a07565b820191906000526020600020905b8154815290600101906020018083116119ea57829003601f168201915b50505050509050919050565b611a1d33836120c7565b611a395760405162461bcd60e51b81526004016108aa906131e0565b611a458484848461241c565b50505050565b600a546001600160a01b03163314611a755760405162461bcd60e51b81526004016108aa906131ab565b600f805460ff19166001179055565b6000818152600260205260409020546060906001600160a01b0316611b035760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108aa565b6000611b0d61244f565b90506000815111611b2d5760405180602001604052806000815250611b58565b80611b378461245e565b604051602001611b48929190613004565b6040516020818303038152906040525b9392505050565b33611b6983610f3f565b6001600160a01b031614611bca5760405162461bcd60e51b815260206004820152602260248201527f4865792c20796f75722077616c6c657420646f65736e2774206f776e20746869604482015261732160f01b60648201526084016108aa565b600082815260106020526040908190209051600291611be891612f68565b602060405180830381855afa158015611c05573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611c289190612e15565b600282604051611c389190612f4c565b602060405180830381855afa158015611c55573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611c789190612e15565b1415611cd25760405162461bcd60e51b815260206004820152602360248201527f4e6577206e616d652069732073616d65206173207468652063757272656e74206044820152626f6e6560e81b60648201526084016108aa565b60008281526010602090815260409091208251611cf192840190612a64565b507fa33829fcab6d9de78b563b84b7db1144770a6168e15aa86deb58f14ab9a000ae338383604051611d2593929190613070565b60405180910390a15050565b600a546001600160a01b03163314611d5b5760405162461bcd60e51b81526004016108aa906131ab565b606483611d67600c5490565b611d719190613231565b1115611dbf5760405162461bcd60e51b815260206004820152601e60248201527f41697264726f702065786365656473206d6178696d756d20737570706c79000060448201526064016108aa565b828114611e225760405162461bcd60e51b815260206004820152602b60248201527f4e6f2e206f662061646472657373657320616e6420746f6b656e20696473207360448201526a0d0deead8c840dac2e8c6d60ab1b60648201526084016108aa565b60005b83811015611f6a576000858583818110611e4157611e41613365565b9050602002016020810190611e569190612bfb565b6001600160a01b03161415611ea75760405162461bcd60e51b81526020600482015260176024820152764d696e74696e6720746f204e756c6c206164647265737360481b60448201526064016108aa565b6064838383818110611ebb57611ebb613365565b905060200201351115611f105760405162461bcd60e51b815260206004820152601e60248201527f546f6b656e4964206f7574736964652072657365727665642072616e6765000060448201526064016108aa565b611f58858583818110611f2557611f25613365565b9050602002016020810190611f3a9190612bfb565b848484818110611f4c57611f4c613365565b9050602002013561255c565b80611f62816132f4565b915050611e25565b5050505050565b600a546001600160a01b03163314611f9b5760405162461bcd60e51b81526004016108aa906131ab565b6001600160a01b0381166120005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108aa565b611400816123ca565b60006001600160e01b031982166380ac58cd60e01b148061203a57506001600160e01b03198216635b5e139f60e01b145b8061079d57506301ffc9a760e01b6001600160e01b031983161461079d565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061208e82610f3f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166121405760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108aa565b600061214b83610f3f565b9050806001600160a01b0316846001600160a01b031614806121865750836001600160a01b031661217b84610835565b6001600160a01b0316145b806121b657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166121d182610f3f565b6001600160a01b0316146122395760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108aa565b6001600160a01b03821661229b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108aa565b6122a6838383612574565b6122b1600082612059565b6001600160a01b03831660009081526003602052604081208054600192906122da90849061327c565b90915550506001600160a01b0382166000908152600360205260408120805460019290612308908490613231565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612377600b80546001019055565b60006064612384600b5490565b61238e9190613231565b905061239a828261262c565b6040518181527fd9dc24857f317ed9abbbb42e920ede0104231eb1d3d70236a74887ffaf15986890602001611d25565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6124278484846121be565b61243384848484612646565b611a455760405162461bcd60e51b81526004016108aa90613159565b6060600e80546107b2906132bf565b6060816124825750506040805180820190915260018152600360fc1b602082015290565b8160005b81156124ac5780612496816132f4565b91506124a59050600a83613249565b9150612486565b60008167ffffffffffffffff8111156124c7576124c761337b565b6040519080825280601f01601f1916602001820160405280156124f1576020820181803683370190505b5090505b84156121b65761250660018361327c565b9150612513600a8661330f565b61251e906030613231565b60f81b81838151811061253357612533613365565b60200101906001600160f81b031916908160001a905350612555600a86613249565b94506124f5565b612566828261262c565b61239a600c80546001019055565b6001600160a01b0383166125cf576125ca81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6125f2565b816001600160a01b0316836001600160a01b0316146125f2576125f28382612753565b6001600160a01b038216612609576109e0816127f0565b826001600160a01b0316826001600160a01b0316146109e0576109e0828261289f565b610f3b8282604051806020016040528060008152506128e3565b60006001600160a01b0384163b1561274857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061268a903390899088908890600401613033565b602060405180830381600087803b1580156126a457600080fd5b505af19250505080156126d4575060408051601f3d908101601f191682019092526126d191810190612e4b565b60015b61272e573d808015612702576040519150601f19603f3d011682016040523d82523d6000602084013e612707565b606091505b5080516127265760405162461bcd60e51b81526004016108aa90613159565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121b6565b506001949350505050565b6000600161276084610fb6565b61276a919061327c565b6000838152600760205260409020549091508082146127bd576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906128029060019061327c565b6000838152600960205260408120546008805493945090928490811061282a5761282a613365565b90600052602060002001549050806008838154811061284b5761284b613365565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806128835761288361334f565b6001900381819060005260206000200160009055905550505050565b60006128aa83610fb6565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6128ed8383612916565b6128fa6000848484612646565b6109e05760405162461bcd60e51b81526004016108aa90613159565b6001600160a01b03821661296c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108aa565b6000818152600260205260409020546001600160a01b0316156129d15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108aa565b6129dd60008383612574565b6001600160a01b0382166000908152600360205260408120805460019290612a06908490613231565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612a70906132bf565b90600052602060002090601f016020900481019282612a925760008555612ad8565b82601f10612aab57805160ff1916838001178555612ad8565b82800160010185558215612ad8579182015b82811115612ad8578251825591602001919060010190612abd565b50612ae4929150612ae8565b5090565b5b80821115612ae45760008155600101612ae9565b600067ffffffffffffffff80841115612b1857612b1861337b565b604051601f8501601f19908116603f01168101908282118183101715612b4057612b4061337b565b81604052809350858152868686011115612b5957600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612b8a57600080fd5b919050565b60008083601f840112612ba157600080fd5b50813567ffffffffffffffff811115612bb957600080fd5b6020830191508360208260051b8501011115612bd457600080fd5b9250929050565b600082601f830112612bec57600080fd5b611b5883833560208501612afd565b600060208284031215612c0d57600080fd5b611b5882612b73565b60008060408385031215612c2957600080fd5b612c3283612b73565b9150612c4060208401612b73565b90509250929050565b600080600060608486031215612c5e57600080fd5b612c6784612b73565b9250612c7560208501612b73565b9150604084013590509250925092565b60008060008060808587031215612c9b57600080fd5b612ca485612b73565b9350612cb260208601612b73565b925060408501359150606085013567ffffffffffffffff811115612cd557600080fd5b8501601f81018713612ce657600080fd5b612cf587823560208401612afd565b91505092959194509250565b60008060408385031215612d1457600080fd5b612d1d83612b73565b915060208301358015158114612d3257600080fd5b809150509250929050565b60008060408385031215612d5057600080fd5b612d5983612b73565b946020939093013593505050565b60008060208385031215612d7a57600080fd5b823567ffffffffffffffff811115612d9157600080fd5b612d9d85828601612b8f565b90969095509350505050565b60008060008060408587031215612dbf57600080fd5b843567ffffffffffffffff80821115612dd757600080fd5b612de388838901612b8f565b90965094506020870135915080821115612dfc57600080fd5b50612e0987828801612b8f565b95989497509550505050565b600060208284031215612e2757600080fd5b5051919050565b600060208284031215612e4057600080fd5b8135611b5881613391565b600060208284031215612e5d57600080fd5b8151611b5881613391565b600060208284031215612e7a57600080fd5b813567ffffffffffffffff811115612e9157600080fd5b6121b684828501612bdb565b600060208284031215612eaf57600080fd5b5035919050565b60008060408385031215612ec957600080fd5b82359150612c4060208401612b73565b60008060408385031215612eec57600080fd5b82359150602083013567ffffffffffffffff811115612f0a57600080fd5b612f1685828601612bdb565b9150509250929050565b60008151808452612f38816020860160208601613293565b601f01601f19169290920160200192915050565b60008251612f5e818460208701613293565b9190910192915050565b600080835481600182811c915080831680612f8457607f831692505b6020808410821415612fa457634e487b7160e01b86526022600452602486fd5b818015612fb85760018114612fc957612ff6565b60ff19861689528489019650612ff6565b60008a81526020902060005b86811015612fee5781548b820152908501908301612fd5565b505084890196505b509498975050505050505050565b60008351613016818460208801613293565b83519083019061302a818360208801613293565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061306690830184612f20565b9695505050505050565b60018060a01b03841681528260208201526060604082015260006130976060830184612f20565b95945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156130f557603f198886030184526130e3858351612f20565b945092850192908501906001016130c7565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561313a5783518352928401929184019160010161311e565b50909695505050505050565b602081526000611b586020830184612f20565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561324457613244613323565b500190565b60008261325857613258613339565b500490565b600081600019048311821515161561327757613277613323565b500290565b60008282101561328e5761328e613323565b500390565b60005b838110156132ae578181015183820152602001613296565b83811115611a455750506000910152565b600181811c908216806132d357607f821691505b6020821081141561191657634e487b7160e01b600052602260045260246000fd5b600060001982141561330857613308613323565b5060010190565b60008261331e5761331e613339565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461140057600080fdfea2646970667358221220318c64c156a6b5aaa138c1e32d0a8b866da5db3f9bc9a3ed1439df57438d19a264736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f7777772e63727970746f626c6f78736e66742e636f6d2f6170692f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://www.cryptobloxsnft.com/api/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000023
Arg [2] : 68747470733a2f2f7777772e63727970746f626c6f78736e66742e636f6d2f61
Arg [3] : 70692f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

46416:7717:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39975:300;;;;;;;;;;-1:-1:-1;39975:300:0;;;;;:::i;:::-;;:::i;:::-;;;12055:14:1;;12048:22;12030:41;;12018:2;12003:18;39975:300:0;;;;;;;;27135:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28828:308::-;;;;;;;;;;-1:-1:-1;28828:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9517:32:1;;;9499:51;;9487:2;9472:18;28828:308:0;9353:203:1;28351:411:0;;;;;;;;;;-1:-1:-1;28351:411:0;;;;;:::i;:::-;;:::i;:::-;;40778:113;;;;;;;;;;-1:-1:-1;40866:10:0;:17;40778:113;;;26301:25:1;;;26289:2;26274:18;40778:113:0;26155:177:1;29887:376:0;;;;;;;;;;-1:-1:-1;29887:376:0;;;;;:::i;:::-;;:::i;40359:343::-;;;;;;;;;;-1:-1:-1;40359:343:0;;;;;:::i;:::-;;:::i;47408:103::-;;;;;;;;;;-1:-1:-1;47408:103:0;;;;;:::i;:::-;;:::i;30334:185::-;;;;;;;;;;-1:-1:-1;30334:185:0;;;;;:::i;:::-;;:::i;48454:80::-;;;;;;;;;;;;;:::i;48341:79::-;;;;;;;;;;;;;:::i;47815:385::-;;;;;;;;;;-1:-1:-1;47815:385:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;49087:868::-;;;;;;:::i;:::-;;:::i;40968:320::-;;;;;;;;;;-1:-1:-1;40968:320:0;;;;;:::i;:::-;;:::i;48565:73::-;;;;;;;;;;;;;:::i;48208:101::-;;;;;;;;;;-1:-1:-1;48208:101:0;;;;;:::i;:::-;;:::i;26742:326::-;;;;;;;;;;-1:-1:-1;26742:326:0;;;;;:::i;:::-;;:::i;26385:295::-;;;;;;;;;;-1:-1:-1;26385:295:0;;;;;:::i;:::-;;:::i;9842:94::-;;;;;;;;;;;;;:::i;50724:454::-;;;;;;;;;;-1:-1:-1;50724:454:0;;;;;:::i;:::-;;:::i;51185:265::-;;;;;;;;;;-1:-1:-1;51185:265:0;;;;;:::i;:::-;;:::i;47517:239::-;;;;;;;;;;-1:-1:-1;47517:239:0;;;;;:::i;:::-;;:::i;48751:174::-;;;;;;;;;;;;;:::i;47137:39::-;;;;;;;;;;-1:-1:-1;47137:39:0;;;;;:::i;:::-;;:::i;52276:112::-;;;;;;;;;;;;;:::i;9191:87::-;;;;;;;;;;-1:-1:-1;9264:6:0;;-1:-1:-1;;;;;9264:6:0;9191:87;;52394:101;;;;;;;;;;;;;:::i;49979:737::-;;;;;;:::i;:::-;;:::i;27304:104::-;;;;;;;;;;;;;:::i;47058:28::-;;;;;;;;;;-1:-1:-1;47058:28:0;;;;;;;;48937:114;;;;;;;;;;;;;:::i;29208:327::-;;;;;;;;;;-1:-1:-1;29208:327:0;;;;;:::i;:::-;;:::i;53573:551::-;;;;;;;;;;-1:-1:-1;53573:551:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;53243:190::-;;;;;;;;;;-1:-1:-1;53243:190:0;;;;;:::i;:::-;;:::i;30590:365::-;;;;;;;;;;-1:-1:-1;30590:365:0;;;;;:::i;:::-;;:::i;48669:74::-;;;;;;;;;;;;;:::i;47093:31::-;;;;;;;;;;-1:-1:-1;47093:31:0;;;;;;;;;;;27479:468;;;;;;;;;;-1:-1:-1;27479:468:0;;;;;:::i;:::-;;:::i;52842:389::-;;;;;;;;;;-1:-1:-1;52842:389:0;;;;;:::i;:::-;;:::i;29606:214::-;;;;;;;;;;-1:-1:-1;29606:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;29777:25:0;;;29748:4;29777:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29606:214;51458:639;;;;;;;;;;-1:-1:-1;51458:639:0;;;;;:::i;:::-;;:::i;10091:229::-;;;;;;;;;;-1:-1:-1;10091:229:0;;;;;:::i;:::-;;:::i;39975:300::-;40122:4;-1:-1:-1;;;;;;40164:50:0;;-1:-1:-1;;;40164:50:0;;:103;;;40231:36;40255:11;40231:23;:36::i;:::-;40144:123;39975:300;-1:-1:-1;;39975:300:0:o;27135:100::-;27189:13;27222:5;27215:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27135:100;:::o;28828:308::-;28949:7;32591:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32591:16:0;28974:110;;;;-1:-1:-1;;;28974:110:0;;20149:2:1;28974:110:0;;;20131:21:1;20188:2;20168:18;;;20161:30;20227:34;20207:18;;;20200:62;-1:-1:-1;;;20278:18:1;;;20271:42;20330:19;;28974:110:0;;;;;;;;;-1:-1:-1;29104:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;29104:24:0;;28828:308::o;28351:411::-;28432:13;28448:23;28463:7;28448:14;:23::i;:::-;28432:39;;28496:5;-1:-1:-1;;;;;28490:11:0;:2;-1:-1:-1;;;;;28490:11:0;;;28482:57;;;;-1:-1:-1;;;28482:57:0;;22153:2:1;28482:57:0;;;22135:21:1;22192:2;22172:18;;;22165:30;22231:34;22211:18;;;22204:62;-1:-1:-1;;;22282:18:1;;;22275:31;22323:19;;28482:57:0;21951:397:1;28482:57:0;2244:10;-1:-1:-1;;;;;28574:21:0;;;;:62;;-1:-1:-1;28599:37:0;28616:5;2244:10;29606:214;:::i;28599:37::-;28552:168;;;;-1:-1:-1;;;28552:168:0;;18183:2:1;28552:168:0;;;18165:21:1;18222:2;18202:18;;;18195:30;18261:34;18241:18;;;18234:62;18332:26;18312:18;;;18305:54;18376:19;;28552:168:0;17981:420:1;28552:168:0;28733:21;28742:2;28746:7;28733:8;:21::i;:::-;28421:341;28351:411;;:::o;29887:376::-;30096:41;2244:10;30129:7;30096:18;:41::i;:::-;30074:140;;;;-1:-1:-1;;;30074:140:0;;;;;;;:::i;:::-;30227:28;30237:4;30243:2;30247:7;30227:9;:28::i;40359:343::-;40501:7;40556:23;40573:5;40556:16;:23::i;:::-;40548:5;:31;40526:124;;;;-1:-1:-1;;;40526:124:0;;13204:2:1;40526:124:0;;;13186:21:1;13243:2;13223:18;;;13216:30;13282:34;13262:18;;;13255:62;-1:-1:-1;;;13333:18:1;;;13326:41;13384:19;;40526:124:0;13002:407:1;40526:124:0;-1:-1:-1;;;;;;40668:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;40359:343::o;47408:103::-;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;47495:8:::1;47479:10;47490:1;47479:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:24:::0;-1:-1:-1;47408:103:0:o;30334:185::-;30472:39;30489:4;30495:2;30499:7;30472:39;;;;;;;;;;;;:16;:39::i;48454:80::-;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;48508:11:::1;:18:::0;;-1:-1:-1;;48508:18:0::1;;;::::0;;48454:80::o;48341:79::-;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;48393:11:::1;:19:::0;;-1:-1:-1;;48393:19:0::1;::::0;;48341:79::o;47815:385::-;47904:16;47938:18;47959:17;47969:6;47959:9;:17::i;:::-;47938:38;;47989:25;48031:10;48017:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48017:25:0;;47989:53;;48058:9;48053:112;48077:10;48073:1;:14;48053:112;;;48123:30;48143:6;48151:1;48123:19;:30::i;:::-;48109:8;48118:1;48109:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;48089:3;;;;:::i;:::-;;;;48053:112;;;-1:-1:-1;48184:8:0;47815:385;-1:-1:-1;;;47815:385:0:o;49087:868::-;9264:6;;-1:-1:-1;;;;;9264:6:0;49166:10;:21;49162:92;;49212:11;;;;;;;49204:38;;;;-1:-1:-1;;;49204:38:0;;15910:2:1;49204:38:0;;;15892:21:1;15949:2;15929:18;;;15922:30;-1:-1:-1;;;15968:18:1;;;15961:44;16022:18;;49204:38:0;15708:338:1;49204:38:0;49305:1;49296:6;:10;:43;;;;;46809:1;49310:6;:29;;49296:43;49274:119;;;;-1:-1:-1;;;49274:119:0;;25595:2:1;49274:119:0;;;25577:21:1;25634:2;25614:18;;;25607:30;25673:28;25653:18;;;25646:56;25719:18;;49274:119:0;25393:350:1;49274:119:0;46720:3;49426:18;:8;1043:14;;951:114;49426:18;:35;49404:101;;;;-1:-1:-1;;;49404:101:0;;25250:2:1;49404:101:0;;;25232:21:1;25289:2;25269:18;;;25262:30;-1:-1:-1;;;25308:18:1;;;25301:46;25364:18;;49404:101:0;25048:340:1;49404:101:0;46720:3;49576:6;49555:18;:8;1043:14;;951:114;49555:18;:27;;;;:::i;:::-;:45;;49533:133;;;;-1:-1:-1;;;49533:133:0;;25950:2:1;49533:133:0;;;25932:21:1;25989:2;25969:18;;;25962:30;26028:34;26008:18;;;26001:62;-1:-1:-1;;;26079:18:1;;;26072:36;26125:19;;49533:133:0;25748:402:1;49533:133:0;49745:6;49729:10;49740:1;49729:13;;;;;;;;:::i;:::-;;;;;;;;;:22;;;;:::i;:::-;49716:9;:35;;49694:105;;;;-1:-1:-1;;;49694:105:0;;14387:2:1;49694:105:0;;;14369:21:1;14426:2;14406:18;;;14399:30;-1:-1:-1;;;14445:18:1;;;14438:50;14505:18;;49694:105:0;14185:344:1;49694:105:0;49826:10;49812:11;49849:90;49873:6;49869:1;:10;49849:90;;;49901:12;49909:3;49901:7;:12::i;:::-;49881:3;;;;:::i;:::-;;;;49849:90;;40968:320;41088:7;41143:30;40866:10;:17;;40778:113;41143:30;41135:5;:38;41113:132;;;;-1:-1:-1;;;41113:132:0;;24425:2:1;41113:132:0;;;24407:21:1;24464:2;24444:18;;;24437:30;24503:34;24483:18;;;24476:62;-1:-1:-1;;;24554:18:1;;;24547:42;24606:19;;41113:132:0;24223:408:1;41113:132:0;41263:10;41274:5;41263:17;;;;;;;;:::i;:::-;;;;;;;;;41256:24;;40968:320;;;:::o;48565:73::-;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;48614:8:::1;:16:::0;;-1:-1:-1;;48614:16:0::1;::::0;;48565:73::o;48208:101::-;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;48279:22;;::::1;::::0;:12:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;48208:101:::0;:::o;26742:326::-;26859:7;26900:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26900:16:0;26949:19;26927:110;;;;-1:-1:-1;;;26927:110:0;;19019:2:1;26927:110:0;;;19001:21:1;19058:2;19038:18;;;19031:30;19097:34;19077:18;;;19070:62;-1:-1:-1;;;19148:18:1;;;19141:39;19197:19;;26927:110:0;18817:405:1;26385:295:0;26502:7;-1:-1:-1;;;;;26549:19:0;;26527:111;;;;-1:-1:-1;;;26527:111:0;;18608:2:1;26527:111:0;;;18590:21:1;18647:2;18627:18;;;18620:30;18686:34;18666:18;;;18659:62;-1:-1:-1;;;18737:18:1;;;18730:40;18787:19;;26527:111:0;18406:406:1;26527:111:0;-1:-1:-1;;;;;;26656:16:0;;;;;:9;:16;;;;;;;26385:295::o;9842:94::-;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;9907:21:::1;9925:1;9907:9;:21::i;:::-;9842:94::o:0;50724:454::-;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;46633:3:::1;50833:11:::0;50811:18:::1;:8;1043:14:::0;;951:114;50811:18:::1;:40;;;;:::i;:::-;:54;;50803:92;;;::::0;-1:-1:-1;;;50803:92:0;;16253:2:1;50803:92:0::1;::::0;::::1;16235:21:1::0;16292:2;16272:18;;;16265:30;16331:28;16311:18;;;16304:56;16377:18;;50803:92:0::1;16051:350:1::0;50803:92:0::1;50914:23:::0;50906:52:::1;;;::::0;-1:-1:-1;;;50906:52:0;;22914:2:1;50906:52:0::1;::::0;::::1;22896:21:1::0;22953:2;22933:18;;;22926:30;-1:-1:-1;;;22972:18:1;;;22965:46;23028:18;;50906:52:0::1;22712:340:1::0;50906:52:0::1;50974:9;50969:202;50989:22:::0;;::::1;50969:202;;;51067:1;51041:11:::0;;51053:1;51041:14;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;51041:28:0::1;;;51033:64;;;::::0;-1:-1:-1;;;51033:64:0;;13616:2:1;51033:64:0::1;::::0;::::1;13598:21:1::0;13655:2;13635:18;;;13628:30;-1:-1:-1;;;13674:18:1;;;13667:53;13737:18;;51033:64:0::1;13414:347:1::0;51033:64:0::1;51124:23;51132:11;;51144:1;51132:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;51124:7;:23::i;:::-;51013:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50969:202;;51185:265:::0;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;46633:3:::1;51291;51270:18;:8;1043:14:::0;;951:114;51270:18:::1;:24;;;;:::i;:::-;:38;;51262:77;;;::::0;-1:-1:-1;;;51262:77:0;;16253:2:1;51262:77:0::1;::::0;::::1;16235:21:1::0;16292:2;16272:18;;;16265:30;16331:28;16311:18;;;16304:56;16377:18;;51262:77:0::1;16051:350:1::0;51262:77:0::1;51354:9;51350:93;51369:3;51367:1;:5;51350:93;;;51404:12;51412:3;51404:7;:12::i;:::-;51374:3:::0;::::1;::::0;::::1;:::i;:::-;;;;51350:93;;47517:239:::0;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;47597:9:::1;47592:146;47612:20:::0;;::::1;47592:146;;;47661:10;:17:::0;47658:20;::::1;47654:31;;;28421:341:::0;28351:411;;:::o;47654:31::-:1;47714:9;;47724:1;47714:12;;;;;;;:::i;:::-;;;;;;;47700:10;47711:1;47700:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:26:::0;47634:3;::::1;::::0;::::1;:::i;:::-;;;;47592:146;;48751:174:::0;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;48821:49:::1;::::0;48803:12:::1;::::0;48821:10:::1;::::0;48844:21:::1;::::0;48803:12;48821:49;48803:12;48821:49;48844:21;48821:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48802:68;;;48889:7;48881:36;;;::::0;-1:-1:-1;;;48881:36:0;;23662:2:1;48881:36:0::1;::::0;::::1;23644:21:1::0;23701:2;23681:18;;;23674:30;-1:-1:-1;;;23720:18:1;;;23713:46;23776:18;;48881:36:0::1;23460:340:1::0;48881:36:0::1;48791:134;48751:174::o:0;47137:39::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52276:112::-;9264:6;;52332:7;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;-1:-1:-1;52360:10:0::1;1043:14:::0;;52276:112::o;52360:20::-:1;52353:27;;52276:112:::0;:::o;52394:101::-;52441:7;52469:18;:8;1043:14;;951:114;49979:737;9264:6;;-1:-1:-1;;;;;9264:6:0;50042:10;:21;50038:86;;50088:8;;;;50080:32;;;;-1:-1:-1;;;50080:32:0;;12508:2:1;50080:32:0;;;12490:21:1;12547:2;12527:18;;;12520:30;-1:-1:-1;;;12566:18:1;;;12559:41;12617:18;;50080:32:0;12306:335:1;50080:32:0;50184:1;50175:6;:10;:35;;;;;46761:2;50189:6;:21;;50175:35;50153:126;;;;-1:-1:-1;;;50153:126:0;;15500:2:1;50153:126:0;;;15482:21:1;15539:2;15519:18;;;15512:30;15578:34;15558:18;;;15551:62;-1:-1:-1;;;15629:18:1;;;15622:39;15678:19;;50153:126:0;15298:405:1;50153:126:0;46633:3;50351:6;50330:18;:8;1043:14;;951:114;50330:18;:27;;;;:::i;:::-;:41;;50308:125;;;;-1:-1:-1;;;50308:125:0;;23259:2:1;50308:125:0;;;23241:21:1;23298:2;23278:18;;;23271:30;23337:34;23317:18;;;23310:62;-1:-1:-1;;;23388:18:1;;;23381:32;23430:19;;50308:125:0;23057:398:1;50308:125:0;50529:6;50512:14;:12;:14::i;:::-;:23;;;;:::i;:::-;50499:9;:36;;50477:106;;;;-1:-1:-1;;;50477:106:0;;14387:2:1;50477:106:0;;;14369:21:1;14426:2;14406:18;;;14399:30;-1:-1:-1;;;14445:18:1;;;14438:50;14505:18;;50477:106:0;14185:344:1;50477:106:0;50610:10;50596:11;50633:76;50657:6;50653:1;:10;50633:76;;;50685:12;50693:3;50685:7;:12::i;:::-;50665:3;;;;:::i;:::-;;;;50633:76;;27304:104;27360:13;27393:7;27386:14;;;;;:::i;48937:114::-;48982:7;49009:10;49039:3;49020:18;:8;1043:14;;951:114;49020:18;:22;;;;:::i;:::-;49009:34;;;;;;;;:::i;:::-;;;;;;;;;49002:41;;48937:114;:::o;29208:327::-;-1:-1:-1;;;;;29343:24:0;;2244:10;29343:24;;29335:62;;;;-1:-1:-1;;;29335:62:0;;17013:2:1;29335:62:0;;;16995:21:1;17052:2;17032:18;;;17025:30;17091:27;17071:18;;;17064:55;17136:18;;29335:62:0;16811:349:1;29335:62:0;2244:10;29410:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;29410:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;29410:53:0;;;;;;;;;;29479:48;;12030:41:1;;;29410:42:0;;2244:10;29479:48;;12003:18:1;29479:48:0;;;;;;;29208:327;;:::o;53573:551::-;53636:15;53665:18;53686:17;53696:6;53686:9;:17::i;:::-;53665:38;-1:-1:-1;53718:15:0;53714:403;;53795:15;;;53808:1;53795:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53788:22:0;53573:551;-1:-1:-1;;;53573:551:0:o;53714:403::-;53843:22;53881:10;53868:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53843:49;;53907:13;53935:143;53959:10;53951:5;:18;53935:143;;;54015:8;:46;54025:34;54045:6;54053:5;54025:19;:34::i;:::-;54015:46;;;;;;;;;;;53999:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;54006:5;53999:13;;;;;;;;:::i;:::-;;;;;;:62;;;;53971:7;;;;;:::i;:::-;;;;53935:143;;53714:403;53654:470;53573:551;;;:::o;53243:190::-;53299:13;53344;40866:10;:17;;40778:113;53344:13;53334:7;:23;53325:65;;;;-1:-1:-1;;;53325:65:0;;12848:2:1;53325:65:0;;;12830:21:1;12887:2;12867:18;;;12860:30;12926:29;12906:18;;;12899:57;12973:18;;53325:65:0;12646:351:1;53325:65:0;53408:17;;;;:8;:17;;;;;53401:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53243:190;;;:::o;30590:365::-;30779:41;2244:10;30812:7;30779:18;:41::i;:::-;30757:140;;;;-1:-1:-1;;;30757:140:0;;;;;;;:::i;:::-;30908:39;30922:4;30928:2;30932:7;30941:5;30908:13;:39::i;:::-;30590:365;;;;:::o;48669:74::-;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;48720:8:::1;:15:::0;;-1:-1:-1;;48720:15:0::1;48731:4;48720:15;::::0;;48669:74::o;27479:468::-;32567:4;32591:16;;;:7;:16;;;;;;27597:13;;-1:-1:-1;;;;;32591:16:0;27628:113;;;;-1:-1:-1;;;27628:113:0;;21333:2:1;27628:113:0;;;21315:21:1;21372:2;21352:18;;;21345:30;21411:34;21391:18;;;21384:62;-1:-1:-1;;;21462:18:1;;;21455:45;21517:19;;27628:113:0;21131:411:1;27628:113:0;27754:21;27778:10;:8;:10::i;:::-;27754:34;;27843:1;27825:7;27819:21;:25;:120;;;;;;;;;;;;;;;;;27888:7;27897:18;:7;:16;:18::i;:::-;27871:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27819:120;27799:140;27479:468;-1:-1:-1;;;27479:468:0:o;52842:389::-;52946:10;52926:16;52934:7;52926;:16::i;:::-;-1:-1:-1;;;;;52926:30:0;;52918:77;;;;-1:-1:-1;;;52918:77:0;;17367:2:1;52918:77:0;;;17349:21:1;17406:2;17386:18;;;17379:30;17445:34;17425:18;;;17418:62;-1:-1:-1;;;17496:18:1;;;17489:32;17538:19;;52918:77:0;17165:398:1;52918:77:0;53051:17;;;;:8;:17;;;;;;;53038:32;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53014:20;53027:5;53014:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;53006:104;;;;-1:-1:-1;;;53006:104:0;;21749:2:1;53006:104:0;;;21731:21:1;21788:2;21768:18;;;21761:30;21827:34;21807:18;;;21800:62;-1:-1:-1;;;21878:18:1;;;21871:33;21921:19;;53006:104:0;21547:399:1;53006:104:0;53121:17;;;;:8;:17;;;;;;;;:25;;;;;;;;:::i;:::-;;53172:41;53186:10;53198:7;53207:5;53172:41;;;;;;;;:::i;:::-;;;;;;;;52842:389;;:::o;51458:639::-;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;46676:3:::1;51609:11:::0;51586:20:::1;:10;1043:14:::0;;951:114;51586:20:::1;:41;;;;:::i;:::-;:58;;51564:138;;;::::0;-1:-1:-1;;;51564:138:0;;19429:2:1;51564:138:0::1;::::0;::::1;19411:21:1::0;19468:2;19448:18;;;19441:30;19507:32;19487:18;;;19480:60;19557:18;;51564:138:0::1;19227:354:1::0;51564:138:0::1;51721:36:::0;;::::1;51713:92;;;::::0;-1:-1:-1;;;51713:92:0;;24838:2:1;51713:92:0::1;::::0;::::1;24820:21:1::0;24877:2;24857:18;;;24850:30;24916:34;24896:18;;;24889:62;-1:-1:-1;;;24967:18:1;;;24960:41;25018:19;;51713:92:0::1;24636:407:1::0;51713:92:0::1;51821:9;51816:274;51836:22:::0;;::::1;51816:274;;;51914:1;51888:11:::0;;51900:1;51888:14;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;51888:28:0::1;;;51880:64;;;::::0;-1:-1:-1;;;51880:64:0;;13616:2:1;51880:64:0::1;::::0;::::1;13598:21:1::0;13655:2;13635:18;;;13628:30;-1:-1:-1;;;13674:18:1;;;13667:53;13737:18;;51880:64:0::1;13414:347:1::0;51880:64:0::1;46676:3;51967:7;;51975:1;51967:10;;;;;;;:::i;:::-;;;;;;;:27;;51959:70;;;::::0;-1:-1:-1;;;51959:70:0;;22555:2:1;51959:70:0::1;::::0;::::1;22537:21:1::0;22594:2;22574:18;;;22567:30;22633:32;22613:18;;;22606:60;22683:18;;51959:70:0::1;22353:354:1::0;51959:70:0::1;52044:34;52052:11;;52064:1;52052:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;52067:7;;52075:1;52067:10;;;;;;;:::i;:::-;;;;;;;52044:7;:34::i;:::-;51860:3:::0;::::1;::::0;::::1;:::i;:::-;;;;51816:274;;;;51458:639:::0;;;;:::o;10091:229::-;9264:6;;-1:-1:-1;;;;;9264:6:0;2244:10;9411:23;9403:68;;;;-1:-1:-1;;;9403:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10194:22:0;::::1;10172:110;;;::::0;-1:-1:-1;;;10172:110:0;;14736:2:1;10172:110:0::1;::::0;::::1;14718:21:1::0;14775:2;14755:18;;;14748:30;14814:34;14794:18;;;14787:62;-1:-1:-1;;;14865:18:1;;;14858:36;14911:19;;10172:110:0::1;14534:402:1::0;10172:110:0::1;10293:19;10303:8;10293:9;:19::i;25966:355::-:0;26113:4;-1:-1:-1;;;;;;26155:40:0;;-1:-1:-1;;;26155:40:0;;:105;;-1:-1:-1;;;;;;;26212:48:0;;-1:-1:-1;;;26212:48:0;26155:105;:158;;;-1:-1:-1;;;;;;;;;;12471:40:0;;;26277:36;12312:207;36625:174;36700:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36700:29:0;-1:-1:-1;;;;;36700:29:0;;;;;;;;:24;;36754:23;36700:24;36754:14;:23::i;:::-;-1:-1:-1;;;;;36745:46:0;;;;;;;;;;;36625:174;;:::o;32796:452::-;32925:4;32591:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32591:16:0;32947:110;;;;-1:-1:-1;;;32947:110:0;;17770:2:1;32947:110:0;;;17752:21:1;17809:2;17789:18;;;17782:30;17848:34;17828:18;;;17821:62;-1:-1:-1;;;17899:18:1;;;17892:42;17951:19;;32947:110:0;17568:408:1;32947:110:0;33068:13;33084:23;33099:7;33084:14;:23::i;:::-;33068:39;;33137:5;-1:-1:-1;;;;;33126:16:0;:7;-1:-1:-1;;;;;33126:16:0;;:64;;;;33183:7;-1:-1:-1;;;;;33159:31:0;:20;33171:7;33159:11;:20::i;:::-;-1:-1:-1;;;;;33159:31:0;;33126:64;:113;;;-1:-1:-1;;;;;;29777:25:0;;;29748:4;29777:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;33207:32;33118:122;32796:452;-1:-1:-1;;;;32796:452:0:o;35892:615::-;36065:4;-1:-1:-1;;;;;36038:31:0;:23;36053:7;36038:14;:23::i;:::-;-1:-1:-1;;;;;36038:31:0;;36016:122;;;;-1:-1:-1;;;36016:122:0;;20923:2:1;36016:122:0;;;20905:21:1;20962:2;20942:18;;;20935:30;21001:34;20981:18;;;20974:62;-1:-1:-1;;;21052:18:1;;;21045:39;21101:19;;36016:122:0;20721:405:1;36016:122:0;-1:-1:-1;;;;;36157:16:0;;36149:65;;;;-1:-1:-1;;;36149:65:0;;16608:2:1;36149:65:0;;;16590:21:1;16647:2;16627:18;;;16620:30;16686:34;16666:18;;;16659:62;-1:-1:-1;;;16737:18:1;;;16730:34;16781:19;;36149:65:0;16406:400:1;36149:65:0;36227:39;36248:4;36254:2;36258:7;36227:20;:39::i;:::-;36331:29;36348:1;36352:7;36331:8;:29::i;:::-;-1:-1:-1;;;;;36373:15:0;;;;;;:9;:15;;;;;:20;;36392:1;;36373:15;:20;;36392:1;;36373:20;:::i;:::-;;;;-1:-1:-1;;;;;;;36404:13:0;;;;;;:9;:13;;;;;:18;;36421:1;;36404:13;:18;;36421:1;;36404:18;:::i;:::-;;;;-1:-1:-1;;36433:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36433:21:0;-1:-1:-1;;;;;36433:21:0;;;;;;;;;36472:27;;36433:16;;36472:27;;;;;;;35892:615;;;:::o;52503:206::-;52552:20;:8;1162:19;;1180:1;1162:19;;;1073:127;52552:20;52583:15;46676:3;52601:18;:8;1043:14;;951:114;52601:18;:32;;;;:::i;:::-;52583:50;;52644:23;52654:3;52659:7;52644:9;:23::i;:::-;52683:18;;26301:25:1;;;52683:18:0;;26289:2:1;26274:18;52683::0;26155:177:1;10328:173:0;10403:6;;;-1:-1:-1;;;;;10420:17:0;;;-1:-1:-1;;;;;;10420:17:0;;;;;;;10453:40;;10403:6;;;10420:17;10403:6;;10453:40;;10384:16;;10453:40;10373:128;10328:173;:::o;31837:352::-;31994:28;32004:4;32010:2;32014:7;31994:9;:28::i;:::-;32055:48;32078:4;32084:2;32088:7;32097:5;32055:22;:48::i;:::-;32033:148;;;;-1:-1:-1;;;32033:148:0;;;;;;;:::i;52717:113::-;52777:13;52810:12;52803:19;;;;;:::i;12833:723::-;12889:13;13110:10;13106:53;;-1:-1:-1;;13137:10:0;;;;;;;;;;;;-1:-1:-1;;;13137:10:0;;;;;12833:723::o;13106:53::-;13184:5;13169:12;13225:78;13232:9;;13225:78;;13258:8;;;;:::i;:::-;;-1:-1:-1;13281:10:0;;-1:-1:-1;13289:2:0;13281:10;;:::i;:::-;;;13225:78;;;13313:19;13345:6;13335:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13335:17:0;;13313:39;;13363:154;13370:10;;13363:154;;13397:11;13407:1;13397:11;;:::i;:::-;;-1:-1:-1;13466:10:0;13474:2;13466:5;:10;:::i;:::-;13453:24;;:2;:24;:::i;:::-;13440:39;;13423:6;13430;13423:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;13423:56:0;;;;;;;;-1:-1:-1;13494:11:0;13503:2;13494:11;;:::i;:::-;;;13363:154;;52103:167;52171:23;52181:3;52186:7;52171:9;:23::i;:::-;52206:22;:10;1162:19;;1180:1;1162:19;;;1073:127;41901:589;-1:-1:-1;;;;;42107:18:0;;42103:187;;42142:40;42174:7;43317:10;:17;;43290:24;;;;:15;:24;;;;;:44;;;43345:24;;;;;;;;;;;;43213:164;42142:40;42103:187;;;42212:2;-1:-1:-1;;;;;42204:10:0;:4;-1:-1:-1;;;;;42204:10:0;;42200:90;;42231:47;42264:4;42270:7;42231:32;:47::i;:::-;-1:-1:-1;;;;;42304:16:0;;42300:183;;42337:45;42374:7;42337:36;:45::i;42300:183::-;42410:4;-1:-1:-1;;;;;42404:10:0;:2;-1:-1:-1;;;;;42404:10:0;;42400:83;;42431:40;42459:2;42463:7;42431:27;:40::i;33590:110::-;33666:26;33676:2;33680:7;33666:26;;;;;;;;;;;;:9;:26::i;37364:984::-;37519:4;-1:-1:-1;;;;;37540:13:0;;15709:20;15757:8;37536:805;;37593:175;;-1:-1:-1;;;37593:175:0;;-1:-1:-1;;;;;37593:36:0;;;;;:175;;2244:10;;37687:4;;37714:7;;37744:5;;37593:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37593:175:0;;;;;;;;-1:-1:-1;;37593:175:0;;;;;;;;;;;;:::i;:::-;;;37572:714;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37955:13:0;;37951:320;;37998:108;;-1:-1:-1;;;37998:108:0;;;;;;;:::i;37951:320::-;38221:6;38215:13;38206:6;38202:2;38198:15;38191:38;37572:714;-1:-1:-1;;;;;;37832:55:0;-1:-1:-1;;;37832:55:0;;-1:-1:-1;37825:62:0;;37536:805;-1:-1:-1;38325:4:0;37364:984;;;;;;:::o;44004:1002::-;44284:22;44334:1;44309:22;44326:4;44309:16;:22::i;:::-;:26;;;;:::i;:::-;44346:18;44367:26;;;:17;:26;;;;;;44284:51;;-1:-1:-1;44500:28:0;;;44496:328;;-1:-1:-1;;;;;44567:18:0;;44545:19;44567:18;;;:12;:18;;;;;;;;:34;;;;;;;;;44618:30;;;;;;:44;;;44735:30;;:17;:30;;;;;:43;;;44496:328;-1:-1:-1;44920:26:0;;;;:17;:26;;;;;;;;44913:33;;;-1:-1:-1;;;;;44964:18:0;;;;;:12;:18;;;;;:34;;;;;;;44957:41;44004:1002::o;45301:1079::-;45579:10;:17;45554:22;;45579:21;;45599:1;;45579:21;:::i;:::-;45611:18;45632:24;;;:15;:24;;;;;;46005:10;:26;;45554:46;;-1:-1:-1;45632:24:0;;45554:46;;46005:26;;;;;;:::i;:::-;;;;;;;;;45983:48;;46069:11;46044:10;46055;46044:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;46149:28;;;:15;:28;;;;;;;:41;;;46321:24;;;;;46314:31;46356:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;45372:1008;;;45301:1079;:::o;42791:221::-;42876:14;42893:20;42910:2;42893:16;:20::i;:::-;-1:-1:-1;;;;;42924:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;42969:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;42791:221:0:o;33927:321::-;34057:18;34063:2;34067:7;34057:5;:18::i;:::-;34108:54;34139:1;34143:2;34147:7;34156:5;34108:22;:54::i;:::-;34086:154;;;;-1:-1:-1;;;34086:154:0;;;;;;;:::i;34584:382::-;-1:-1:-1;;;;;34664:16:0;;34656:61;;;;-1:-1:-1;;;34656:61:0;;19788:2:1;34656:61:0;;;19770:21:1;;;19807:18;;;19800:30;19866:34;19846:18;;;19839:62;19918:18;;34656:61:0;19586:356:1;34656:61:0;32567:4;32591:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32591:16:0;:30;34728:58;;;;-1:-1:-1;;;34728:58:0;;15143:2:1;34728:58:0;;;15125:21:1;15182:2;15162:18;;;15155:30;15221;15201:18;;;15194:58;15269:18;;34728:58:0;14941:352:1;34728:58:0;34799:45;34828:1;34832:2;34836:7;34799:20;:45::i;:::-;-1:-1:-1;;;;;34857:13:0;;;;;;:9;:13;;;;;:18;;34874:1;;34857:13;:18;;34874:1;;34857:18;:::i;:::-;;;;-1:-1:-1;;34886:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34886:21:0;-1:-1:-1;;;;;34886:21:0;;;;;;;;34925:33;;34886:16;;;34925:33;;34886:16;;34925:33;34584:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:367::-;891:8;901:6;955:3;948:4;940:6;936:17;932:27;922:55;;973:1;970;963:12;922:55;-1:-1:-1;996:20:1;;1039:18;1028:30;;1025:50;;;1071:1;1068;1061:12;1025:50;1108:4;1100:6;1096:17;1084:29;;1168:3;1161:4;1151:6;1148:1;1144:14;1136:6;1132:27;1128:38;1125:47;1122:67;;;1185:1;1182;1175:12;1122:67;828:367;;;;;:::o;1200:221::-;1243:5;1296:3;1289:4;1281:6;1277:17;1273:27;1263:55;;1314:1;1311;1304:12;1263:55;1336:79;1411:3;1402:6;1389:20;1382:4;1374:6;1370:17;1336:79;:::i;1426:186::-;1485:6;1538:2;1526:9;1517:7;1513:23;1509:32;1506:52;;;1554:1;1551;1544:12;1506:52;1577:29;1596:9;1577:29;:::i;1617:260::-;1685:6;1693;1746:2;1734:9;1725:7;1721:23;1717:32;1714:52;;;1762:1;1759;1752:12;1714:52;1785:29;1804:9;1785:29;:::i;:::-;1775:39;;1833:38;1867:2;1856:9;1852:18;1833:38;:::i;:::-;1823:48;;1617:260;;;;;:::o;1882:328::-;1959:6;1967;1975;2028:2;2016:9;2007:7;2003:23;1999:32;1996:52;;;2044:1;2041;2034:12;1996:52;2067:29;2086:9;2067:29;:::i;:::-;2057:39;;2115:38;2149:2;2138:9;2134:18;2115:38;:::i;:::-;2105:48;;2200:2;2189:9;2185:18;2172:32;2162:42;;1882:328;;;;;:::o;2215:666::-;2310:6;2318;2326;2334;2387:3;2375:9;2366:7;2362:23;2358:33;2355:53;;;2404:1;2401;2394:12;2355:53;2427:29;2446:9;2427:29;:::i;:::-;2417:39;;2475:38;2509:2;2498:9;2494:18;2475:38;:::i;:::-;2465:48;;2560:2;2549:9;2545:18;2532:32;2522:42;;2615:2;2604:9;2600:18;2587:32;2642:18;2634:6;2631:30;2628:50;;;2674:1;2671;2664:12;2628:50;2697:22;;2750:4;2742:13;;2738:27;-1:-1:-1;2728:55:1;;2779:1;2776;2769:12;2728:55;2802:73;2867:7;2862:2;2849:16;2844:2;2840;2836:11;2802:73;:::i;:::-;2792:83;;;2215:666;;;;;;;:::o;2886:347::-;2951:6;2959;3012:2;3000:9;2991:7;2987:23;2983:32;2980:52;;;3028:1;3025;3018:12;2980:52;3051:29;3070:9;3051:29;:::i;:::-;3041:39;;3130:2;3119:9;3115:18;3102:32;3177:5;3170:13;3163:21;3156:5;3153:32;3143:60;;3199:1;3196;3189:12;3143:60;3222:5;3212:15;;;2886:347;;;;;:::o;3238:254::-;3306:6;3314;3367:2;3355:9;3346:7;3342:23;3338:32;3335:52;;;3383:1;3380;3373:12;3335:52;3406:29;3425:9;3406:29;:::i;:::-;3396:39;3482:2;3467:18;;;;3454:32;;-1:-1:-1;;;3238:254:1:o;3497:437::-;3583:6;3591;3644:2;3632:9;3623:7;3619:23;3615:32;3612:52;;;3660:1;3657;3650:12;3612:52;3700:9;3687:23;3733:18;3725:6;3722:30;3719:50;;;3765:1;3762;3755:12;3719:50;3804:70;3866:7;3857:6;3846:9;3842:22;3804:70;:::i;:::-;3893:8;;3778:96;;-1:-1:-1;3497:437:1;-1:-1:-1;;;;3497:437:1:o;3939:773::-;4061:6;4069;4077;4085;4138:2;4126:9;4117:7;4113:23;4109:32;4106:52;;;4154:1;4151;4144:12;4106:52;4194:9;4181:23;4223:18;4264:2;4256:6;4253:14;4250:34;;;4280:1;4277;4270:12;4250:34;4319:70;4381:7;4372:6;4361:9;4357:22;4319:70;:::i;:::-;4408:8;;-1:-1:-1;4293:96:1;-1:-1:-1;4496:2:1;4481:18;;4468:32;;-1:-1:-1;4512:16:1;;;4509:36;;;4541:1;4538;4531:12;4509:36;;4580:72;4644:7;4633:8;4622:9;4618:24;4580:72;:::i;:::-;3939:773;;;;-1:-1:-1;4671:8:1;-1:-1:-1;;;;3939:773:1:o;5159:184::-;5229:6;5282:2;5270:9;5261:7;5257:23;5253:32;5250:52;;;5298:1;5295;5288:12;5250:52;-1:-1:-1;5321:16:1;;5159:184;-1:-1:-1;5159:184:1:o;5348:245::-;5406:6;5459:2;5447:9;5438:7;5434:23;5430:32;5427:52;;;5475:1;5472;5465:12;5427:52;5514:9;5501:23;5533:30;5557:5;5533:30;:::i;5598:249::-;5667:6;5720:2;5708:9;5699:7;5695:23;5691:32;5688:52;;;5736:1;5733;5726:12;5688:52;5768:9;5762:16;5787:30;5811:5;5787:30;:::i;5852:322::-;5921:6;5974:2;5962:9;5953:7;5949:23;5945:32;5942:52;;;5990:1;5987;5980:12;5942:52;6030:9;6017:23;6063:18;6055:6;6052:30;6049:50;;;6095:1;6092;6085:12;6049:50;6118;6160:7;6151:6;6140:9;6136:22;6118:50;:::i;6179:180::-;6238:6;6291:2;6279:9;6270:7;6266:23;6262:32;6259:52;;;6307:1;6304;6297:12;6259:52;-1:-1:-1;6330:23:1;;6179:180;-1:-1:-1;6179:180:1:o;6364:254::-;6432:6;6440;6493:2;6481:9;6472:7;6468:23;6464:32;6461:52;;;6509:1;6506;6499:12;6461:52;6545:9;6532:23;6522:33;;6574:38;6608:2;6597:9;6593:18;6574:38;:::i;6623:390::-;6701:6;6709;6762:2;6750:9;6741:7;6737:23;6733:32;6730:52;;;6778:1;6775;6768:12;6730:52;6814:9;6801:23;6791:33;;6875:2;6864:9;6860:18;6847:32;6902:18;6894:6;6891:30;6888:50;;;6934:1;6931;6924:12;6888:50;6957;6999:7;6990:6;6979:9;6975:22;6957:50;:::i;:::-;6947:60;;;6623:390;;;;;:::o;7018:257::-;7059:3;7097:5;7091:12;7124:6;7119:3;7112:19;7140:63;7196:6;7189:4;7184:3;7180:14;7173:4;7166:5;7162:16;7140:63;:::i;:::-;7257:2;7236:15;-1:-1:-1;;7232:29:1;7223:39;;;;7264:4;7219:50;;7018:257;-1:-1:-1;;7018:257:1:o;7280:274::-;7409:3;7447:6;7441:13;7463:53;7509:6;7504:3;7497:4;7489:6;7485:17;7463:53;:::i;:::-;7532:16;;;;;7280:274;-1:-1:-1;;7280:274:1:o;7559:1104::-;7689:3;7718:1;7751:6;7745:13;7781:3;7803:1;7831:9;7827:2;7823:18;7813:28;;7891:2;7880:9;7876:18;7913;7903:61;;7957:4;7949:6;7945:17;7935:27;;7903:61;7983:2;8031;8023:6;8020:14;8000:18;7997:38;7994:165;;;-1:-1:-1;;;8058:33:1;;8114:4;8111:1;8104:15;8144:4;8065:3;8132:17;7994:165;8175:18;8202:104;;;;8320:1;8315:323;;;;8168:470;;8202:104;-1:-1:-1;;8235:24:1;;8223:37;;8280:16;;;;-1:-1:-1;8202:104:1;;8315:323;26413:1;26406:14;;;26450:4;26437:18;;8413:1;8427:165;8441:6;8438:1;8435:13;8427:165;;;8519:14;;8506:11;;;8499:35;8562:16;;;;8456:10;;8427:165;;;8431:3;;8621:6;8616:3;8612:16;8605:23;;8168:470;-1:-1:-1;8654:3:1;;7559:1104;-1:-1:-1;;;;;;;;7559:1104:1:o;8668:470::-;8847:3;8885:6;8879:13;8901:53;8947:6;8942:3;8935:4;8927:6;8923:17;8901:53;:::i;:::-;9017:13;;8976:16;;;;9039:57;9017:13;8976:16;9073:4;9061:17;;9039:57;:::i;:::-;9112:20;;8668:470;-1:-1:-1;;;;8668:470:1:o;9561:488::-;-1:-1:-1;;;;;9830:15:1;;;9812:34;;9882:15;;9877:2;9862:18;;9855:43;9929:2;9914:18;;9907:34;;;9977:3;9972:2;9957:18;;9950:31;;;9755:4;;9998:45;;10023:19;;10015:6;9998:45;:::i;:::-;9990:53;9561:488;-1:-1:-1;;;;;;9561:488:1:o;10054:387::-;10288:1;10284;10279:3;10275:11;10271:19;10263:6;10259:32;10248:9;10241:51;10328:6;10323:2;10312:9;10308:18;10301:34;10371:2;10366;10355:9;10351:18;10344:30;10222:4;10391:44;10431:2;10420:9;10416:18;10408:6;10391:44;:::i;:::-;10383:52;10054:387;-1:-1:-1;;;;;10054:387:1:o;10446:802::-;10608:4;10637:2;10677;10666:9;10662:18;10707:2;10696:9;10689:21;10730:6;10765;10759:13;10796:6;10788;10781:22;10834:2;10823:9;10819:18;10812:25;;10896:2;10886:6;10883:1;10879:14;10868:9;10864:30;10860:39;10846:53;;10934:2;10926:6;10922:15;10955:1;10965:254;10979:6;10976:1;10973:13;10965:254;;;11072:2;11068:7;11056:9;11048:6;11044:22;11040:36;11035:3;11028:49;11100:39;11132:6;11123;11117:13;11100:39;:::i;:::-;11090:49;-1:-1:-1;11197:12:1;;;;11162:15;;;;11001:1;10994:9;10965:254;;;-1:-1:-1;11236:6:1;;10446:802;-1:-1:-1;;;;;;;10446:802:1:o;11253:632::-;11424:2;11476:21;;;11546:13;;11449:18;;;11568:22;;;11395:4;;11424:2;11647:15;;;;11621:2;11606:18;;;11395:4;11690:169;11704:6;11701:1;11698:13;11690:169;;;11765:13;;11753:26;;11834:15;;;;11799:12;;;;11726:1;11719:9;11690:169;;;-1:-1:-1;11876:3:1;;11253:632;-1:-1:-1;;;;;;11253:632:1:o;12082:219::-;12231:2;12220:9;12213:21;12194:4;12251:44;12291:2;12280:9;12276:18;12268:6;12251:44;:::i;13766:414::-;13968:2;13950:21;;;14007:2;13987:18;;;13980:30;14046:34;14041:2;14026:18;;14019:62;-1:-1:-1;;;14112:2:1;14097:18;;14090:48;14170:3;14155:19;;13766:414::o;20360:356::-;20562:2;20544:21;;;20581:18;;;20574:30;20640:34;20635:2;20620:18;;20613:62;20707:2;20692:18;;20360:356::o;23805:413::-;24007:2;23989:21;;;24046:2;24026:18;;;24019:30;24085:34;24080:2;24065:18;;24058:62;-1:-1:-1;;;24151:2:1;24136:18;;24129:47;24208:3;24193:19;;23805:413::o;26466:128::-;26506:3;26537:1;26533:6;26530:1;26527:13;26524:39;;;26543:18;;:::i;:::-;-1:-1:-1;26579:9:1;;26466:128::o;26599:120::-;26639:1;26665;26655:35;;26670:18;;:::i;:::-;-1:-1:-1;26704:9:1;;26599:120::o;26724:168::-;26764:7;26830:1;26826;26822:6;26818:14;26815:1;26812:21;26807:1;26800:9;26793:17;26789:45;26786:71;;;26837:18;;:::i;:::-;-1:-1:-1;26877:9:1;;26724:168::o;26897:125::-;26937:4;26965:1;26962;26959:8;26956:34;;;26970:18;;:::i;:::-;-1:-1:-1;27007:9:1;;26897:125::o;27027:258::-;27099:1;27109:113;27123:6;27120:1;27117:13;27109:113;;;27199:11;;;27193:18;27180:11;;;27173:39;27145:2;27138:10;27109:113;;;27240:6;27237:1;27234:13;27231:48;;;-1:-1:-1;;27275:1:1;27257:16;;27250:27;27027:258::o;27290:380::-;27369:1;27365:12;;;;27412;;;27433:61;;27487:4;27479:6;27475:17;27465:27;;27433:61;27540:2;27532:6;27529:14;27509:18;27506:38;27503:161;;;27586:10;27581:3;27577:20;27574:1;27567:31;27621:4;27618:1;27611:15;27649:4;27646:1;27639:15;27675:135;27714:3;-1:-1:-1;;27735:17:1;;27732:43;;;27755:18;;:::i;:::-;-1:-1:-1;27802:1:1;27791:13;;27675:135::o;27815:112::-;27847:1;27873;27863:35;;27878:18;;:::i;:::-;-1:-1:-1;27912:9:1;;27815:112::o;27932:127::-;27993:10;27988:3;27984:20;27981:1;27974:31;28024:4;28021:1;28014:15;28048:4;28045:1;28038:15;28064:127;28125:10;28120:3;28116:20;28113:1;28106:31;28156:4;28153:1;28146:15;28180:4;28177:1;28170:15;28196:127;28257:10;28252:3;28248:20;28245:1;28238:31;28288:4;28285:1;28278:15;28312:4;28309:1;28302:15;28328:127;28389:10;28384:3;28380:20;28377:1;28370:31;28420:4;28417:1;28410:15;28444:4;28441:1;28434:15;28460:127;28521:10;28516:3;28512:20;28509:1;28502:31;28552:4;28549:1;28542:15;28576:4;28573:1;28566:15;28592:131;-1:-1:-1;;;;;;28666:32:1;;28656:43;;28646:71;;28713:1;28710;28703:12

Swarm Source

ipfs://318c64c156a6b5aaa138c1e32d0a8b866da5db3f9bc9a3ed1439df57438d19a2
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.