ETH Price: $3,284.09 (-0.80%)
Gas: 11 Gwei

Token

Crypto Holdem NFT (CHNFT)
 

Overview

Max Total Supply

1,320 CHNFT

Holders

378

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
1darian.eth
Balance
1 CHNFT
0x1303efb7660952d633ac77a2da5391d1eb0132e0
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:
PokerNFT

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-21
*/

// SPDX-License-Identifier: MIT

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/[email protected]

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

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

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File @openzeppelin/contracts/token/ERC721/[email protected]

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/extensions/[email protected]

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/utils/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/utils/[email protected]

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/[email protected]

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/introspection/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File @openzeppelin/contracts/token/ERC721/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

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/token/ERC721/extensions/[email protected]

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/access/[email protected]

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: contracts/PokerNFT.sol

pragma solidity ^0.8.0;

/**
 * @title PokerNFT contract
 * @dev Extends ERC721 Non-Fungible Token Standard basic implementation
 */
contract PokerNFT is ERC721Enumerable, Ownable {

    uint256 public MAX_NFT_SUPPLY = 9282;

    uint256 public VIP_PRESALE_PRICE = 0.65 ether;
    uint256 public WL_PRESALE_PRICE = 0.2 ether;
    uint256 public PUBLICSALE_PRICE = 0.4 ether;
    uint256 public MAX_MINT = 100;    
    uint256 public MAX_NFT_WALLET = 100;

    uint256 public vipPresaleStartTimestamp;
    uint256 public vipPresaleEndTimestamp;

    uint256 public wlPresaleStartTimestamp;
    uint256 public wlPresaleEndTimestamp;

    uint256 public publicSaleStartTimestamp;

    string public baseTokenURI;

    bool public isSaleActive = true;
    
    mapping(address => bool) private whitelisted;
    mapping(address => bool) private vipList;

    event BaseURIChanged(string baseURI);
    event ReserveSaleMint(address minter, uint256 amountOfNFTs);
    event FinalSaleMint(address minter, uint256 amountOfNFTs);

    constructor(uint256 _vipPresaleStartTimestamp, uint256 _vipPresaleEndTimestamp, uint256 _wlPresaleStartTimestamp, uint256 _wlPresaleEndTimestamp, uint256 _publicSaleStartTimestamp) ERC721("Crypto Holdem NFT", "CHNFT") {
        // baseTokenURI = baseURI;
        vipPresaleStartTimestamp = _vipPresaleStartTimestamp;
        vipPresaleEndTimestamp = _vipPresaleEndTimestamp;

        wlPresaleStartTimestamp = _wlPresaleStartTimestamp;
        wlPresaleEndTimestamp = _wlPresaleEndTimestamp;

        publicSaleStartTimestamp = _publicSaleStartTimestamp;
    }

    function addToWhitelist(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            whitelisted[addresses[i]] = true;
        }
    }

    function removeFromWhitelist(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            whitelisted[addresses[i]] = false;
        }
    }

    function checkIfWhitelisted(address addr) external view returns (bool) {
        return whitelisted[addr];
    }

    function addToVIPList(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            vipList[addresses[i]] = true;
        }
    }

    function removeFromVIPList(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            vipList[addresses[i]] = false;
        }
    }

    function checkIfVIP(address addr) external view returns (bool) {
        return vipList[addr];
    }

    function flipSaleState() public onlyOwner {
        isSaleActive = !isSaleActive;
    }

    function reserveNFT(uint256 numberOfNfts, address[] memory _senderAddress) public onlyOwner {        

        for (uint i = 0; i < numberOfNfts; i++) {
            uint supply = totalSupply();
            if (totalSupply() < MAX_NFT_SUPPLY) 
            {
                _safeMint(_senderAddress[i], supply);
            }
        }
    }

    function mintNFT(uint256 amountOfNFTs) external payable {
        require(isSaleActive, "Sale must be active to mint NFT");
        require(totalSupply() + amountOfNFTs <= MAX_NFT_SUPPLY, "Minting would exceed max supply");
        require(amountOfNFTs <= MAX_MINT, "Cannot purchase this many tokens in a transaction");
        require(balanceOf(msg.sender) + amountOfNFTs <= MAX_NFT_WALLET, "Purchase exceeds max allowed per wallet");

        if(block.timestamp >= publicSaleStartTimestamp) {
            require(PUBLICSALE_PRICE * amountOfNFTs == msg.value, "ETH amount is incorrect");
        } else if(block.timestamp >= wlPresaleStartTimestamp && block.timestamp < wlPresaleEndTimestamp) {
            require(WL_PRESALE_PRICE * amountOfNFTs == msg.value, "ETH amount is incorrect");
            require(whitelisted[msg.sender], "You are not whitelisted");
        } else if(block.timestamp >= vipPresaleStartTimestamp && block.timestamp < vipPresaleEndTimestamp) {
            require(VIP_PRESALE_PRICE * amountOfNFTs == msg.value, "ETH amount is incorrect");
            require(vipList[msg.sender], "You are not in VIP List");
        }
        else {
            require(false, "No Sale is Active");
        }
        
        for (uint256 i = 0; i < amountOfNFTs; i++) {
            uint256 tokenId = totalSupply();

            _safeMint(msg.sender, tokenId);
        }

        emit FinalSaleMint(msg.sender, amountOfNFTs);
    }

    function saleActive() public view returns(string memory) {
        string memory sale ;
        if(block.timestamp >= publicSaleStartTimestamp) {
            sale = "Public Sale";
        } else if(block.timestamp >= wlPresaleStartTimestamp && block.timestamp < wlPresaleEndTimestamp) {
            sale = "WL Presale";
        } else if(block.timestamp >= vipPresaleStartTimestamp && block.timestamp < vipPresaleEndTimestamp) {
            sale = "VIP Presale";
        } else {
            sale = "No Sale";
        }
        return sale;
    }

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

    function setVIP_PRESALE_PRICE(uint256 _amount) external onlyOwner {
        VIP_PRESALE_PRICE = _amount;
    }

    function setWL_PRESALE_PRICE(uint256 _amount) external onlyOwner {
        WL_PRESALE_PRICE = _amount;
    }

    function setPUBLICSALE_PRICE(uint256 _amount) external onlyOwner {
        PUBLICSALE_PRICE = _amount;
    }

    function updateVIPPresaleStartTimestamp(uint256 _vipPresaleStartTimestamp) external onlyOwner {
        vipPresaleStartTimestamp = _vipPresaleStartTimestamp;
    }

    function updateVIPPresaleEndTimestamp(uint256 _vipPresaleEndTimestamp) external onlyOwner {
        vipPresaleEndTimestamp = _vipPresaleEndTimestamp;
    }

    function updateWLPresaleStartTimestamp(uint256 _wlPresaleStartTimestamp) external onlyOwner {
        wlPresaleStartTimestamp = _wlPresaleStartTimestamp;
    }

    function updateWLPresaleEndTimestamp(uint256 _wlPresaleEndTimestamp) external onlyOwner {
        wlPresaleEndTimestamp = _wlPresaleEndTimestamp;
    }

    function updatePublicSaleStartTimestamp(uint256 _publicSaleStartTimestamp) external onlyOwner {
        publicSaleStartTimestamp = _publicSaleStartTimestamp;
    }

    function setMAX_MINT(uint256 _amount) external onlyOwner {
        MAX_MINT = _amount;
    }

    function setMAX_NFTS_WALLET(uint256 _amount) external onlyOwner {
        MAX_NFT_WALLET = _amount;
    }
    
    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }

    function withdrawAll() public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "Insufficent balance");
        uint256 Ahmed = (balance * 6) / 100 ;
        uint256 ownerBal = balance - Ahmed;
        (bool success, ) = payable(owner()).call{value: ownerBal}("");
        require(success, "Transfer failed to Ahmed");
        (bool success1, ) = payable(0xC06ED1ae23639089cdCC2024AC725a3Ef8F2e1a5).call{value: Ahmed}("");
        require(success1, "Transfer failed to Ahmed");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_vipPresaleStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"_vipPresaleEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"_wlPresaleStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"_wlPresaleEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"_publicSaleStartTimestamp","type":"uint256"}],"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":"string","name":"baseURI","type":"string"}],"name":"BaseURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfNFTs","type":"uint256"}],"name":"FinalSaleMint","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":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfNFTs","type":"uint256"}],"name":"ReserveSaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFT_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLICSALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VIP_PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WL_PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToVIPList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToWhitelist","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":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkIfVIP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkIfWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfNFTs","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeFromVIPList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfNfts","type":"uint256"},{"internalType":"address[]","name":"_senderAddress","type":"address[]"}],"name":"reserveNFT","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":"saleActive","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"_amount","type":"uint256"}],"name":"setMAX_MINT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMAX_NFTS_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setPUBLICSALE_PRICE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setVIP_PRESALE_PRICE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setWL_PRESALE_PRICE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleStartTimestamp","type":"uint256"}],"name":"updatePublicSaleStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vipPresaleEndTimestamp","type":"uint256"}],"name":"updateVIPPresaleEndTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vipPresaleStartTimestamp","type":"uint256"}],"name":"updateVIPPresaleStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wlPresaleEndTimestamp","type":"uint256"}],"name":"updateWLPresaleEndTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wlPresaleStartTimestamp","type":"uint256"}],"name":"updateWLPresaleStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vipPresaleEndTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vipPresaleStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wlPresaleEndTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wlPresaleStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052612442600b55670905438e60010000600c556702c68af0bb140000600d5567058d15e176280000600e556064600f8190556010556017805460ff191660011790553480156200005257600080fd5b506040516200377838038062003778833981016040819052620000759162000215565b604080518082018252601181527010dc9e5c1d1bc8121bdb19195b48139195607a1b60208083019182528351808501909452600584526410d213919560da1b908401528151919291620000cb916000916200016f565b508051620000e19060019060208401906200016f565b505050620000fe620000f86200011960201b60201c565b6200011d565b60119490945560129290925560135560145560155562000292565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200017d9062000255565b90600052602060002090601f016020900481019282620001a15760008555620001ec565b82601f10620001bc57805160ff1916838001178555620001ec565b82800160010185558215620001ec579182015b82811115620001ec578251825591602001919060010190620001cf565b50620001fa929150620001fe565b5090565b5b80821115620001fa5760008155600101620001ff565b600080600080600060a086880312156200022d578081fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6002810460018216806200026a57607f821691505b602082108114156200028c57634e487b7160e01b600052602260045260246000fd5b50919050565b6134d680620002a26000396000f3fe6080604052600436106103355760003560e01c8063748a1181116101ab578063a4c818ab116100f7578063d08b11e311610095578063e985e9c51161006f578063e985e9c5146108d0578063f0292a03146108f0578063f2fde38b14610905578063f48d11af1461092557610335565b8063d08b11e314610891578063d547cfb7146108a6578063d7822c99146108bb57610335565b8063b88d4fde116100d1578063b88d4fde14610811578063c5730ee814610831578063c87b56dd14610851578063c8813ffd1461087157610335565b8063a4c818ab146107c7578063ab75c2db146107dc578063b5077f44146107fc57610335565b8063926427441161016457806399ee60901161013e57806399ee60901461075d578063a062ba381461077d578063a22cb46514610792578063a3e7868a146107b257610335565b8063926427441461071557806395d89b4114610728578063972a0f511461073d57610335565b8063748a1181146106765780637f64978314610696578063853828b6146106b6578063860a2e6d146106cb57806389bcb73c146106e05780638da5cb5b1461070057610335565b806353980d9311610285578063639bdee71161022357806370a08231116101fd57806370a082311461060c578063715018a61461062c57806371c83a5714610641578063742e71f21461065657610335565b8063639bdee7146105c257806368428a1b146105d757806369625ae5146105ec57610335565b8063564566a81161025f578063564566a81461054d57806359a165cc146105625780635fee68da146105825780636352211e146105a257610335565b806353980d93146104ed578063548db1741461050d57806355f804b31461052d57610335565b806323b872dd116102f257806334918dfd116102cc57806334918dfd146104835780633c93ba391461049857806342842e0e146104ad5780634f6ccce7146104cd57610335565b806323b872dd146104235780632660a92e146104435780632f745c591461046357610335565b806301ffc9a71461033a57806306fdde0314610370578063081812fc14610392578063095ea7b3146103bf57806318160ddd146103e157806322f574b514610403575b600080fd5b34801561034657600080fd5b5061035a610355366004612979565b610945565b6040516103679190612b91565b60405180910390f35b34801561037c57600080fd5b50610385610972565b6040516103679190612b9c565b34801561039e57600080fd5b506103b26103ad3660046129f7565b610a04565b6040516103679190612b27565b3480156103cb57600080fd5b506103df6103da3660046128e1565b610a50565b005b3480156103ed57600080fd5b506103f6610ae8565b604051610367919061331d565b34801561040f57600080fd5b506103df61041e3660046129f7565b610aee565b34801561042f57600080fd5b506103df61043e3660046127f3565b610b32565b34801561044f57600080fd5b5061035a61045e3660046127a7565b610b6a565b34801561046f57600080fd5b506103f661047e3660046128e1565b610b88565b34801561048f57600080fd5b506103df610bda565b3480156104a457600080fd5b506103f6610c2d565b3480156104b957600080fd5b506103df6104c83660046127f3565b610c33565b3480156104d957600080fd5b506103f66104e83660046129f7565b610c4e565b3480156104f957600080fd5b506103df6105083660046129f7565b610ca9565b34801561051957600080fd5b506103df61052836600461290a565b610ced565b34801561053957600080fd5b506103df6105483660046129b1565b610e0a565b34801561055957600080fd5b5061035a610e97565b34801561056e57600080fd5b506103df61057d3660046129f7565b610ea0565b34801561058e57600080fd5b506103df61059d3660046129f7565b610ee4565b3480156105ae57600080fd5b506103b26105bd3660046129f7565b610f28565b3480156105ce57600080fd5b506103f6610f5d565b3480156105e357600080fd5b50610385610f63565b3480156105f857600080fd5b506103df6106073660046129f7565b61103b565b34801561061857600080fd5b506103f66106273660046127a7565b61107f565b34801561063857600080fd5b506103df6110c3565b34801561064d57600080fd5b506103f661110e565b34801561066257600080fd5b506103df6106713660046129f7565b611114565b34801561068257600080fd5b506103df6106913660046129f7565b611158565b3480156106a257600080fd5b506103df6106b136600461290a565b61119c565b3480156106c257600080fd5b506103df6112b9565b3480156106d757600080fd5b506103f6611459565b3480156106ec57600080fd5b506103df6106fb366004612a0f565b61145f565b34801561070c57600080fd5b506103b261150a565b6103df6107233660046129f7565b611519565b34801561073457600080fd5b50610385611764565b34801561074957600080fd5b506103df6107583660046129f7565b611773565b34801561076957600080fd5b506103df6107783660046129f7565b6117b7565b34801561078957600080fd5b506103f66117fb565b34801561079e57600080fd5b506103df6107ad3660046128a7565b611801565b3480156107be57600080fd5b506103f66118cf565b3480156107d357600080fd5b506103f66118d5565b3480156107e857600080fd5b5061035a6107f73660046127a7565b6118db565b34801561080857600080fd5b506103f66118f9565b34801561081d57600080fd5b506103df61082c36600461282e565b6118ff565b34801561083d57600080fd5b506103df61084c3660046129f7565b61193e565b34801561085d57600080fd5b5061038561086c3660046129f7565b611982565b34801561087d57600080fd5b506103df61088c36600461290a565b611a05565b34801561089d57600080fd5b506103f6611b22565b3480156108b257600080fd5b50610385611b28565b3480156108c757600080fd5b506103f6611bb6565b3480156108dc57600080fd5b5061035a6108eb3660046127c1565b611bbc565b3480156108fc57600080fd5b506103f6611bea565b34801561091157600080fd5b506103df6109203660046127a7565b611bf0565b34801561093157600080fd5b506103df61094036600461290a565b611c61565b60006001600160e01b0319821663780e9d6360e01b148061096a575061096a82611d7e565b90505b919050565b606060008054610981906133de565b80601f01602080910402602001604051908101604052809291908181526020018280546109ad906133de565b80156109fa5780601f106109cf576101008083540402835291602001916109fa565b820191906000526020600020905b8154815290600101906020018083116109dd57829003601f168201915b5050505050905090565b6000610a0f82611dbe565b610a345760405162461bcd60e51b8152600401610a2b90613050565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610a5b82610f28565b9050806001600160a01b0316836001600160a01b03161415610a8f5760405162461bcd60e51b8152600401610a2b906131c1565b806001600160a01b0316610aa1611ddb565b6001600160a01b03161480610abd5750610abd816108eb611ddb565b610ad95760405162461bcd60e51b8152600401610a2b90612e35565b610ae38383611ddf565b505050565b60085490565b610af6611ddb565b6001600160a01b0316610b0761150a565b6001600160a01b031614610b2d5760405162461bcd60e51b8152600401610a2b906130c9565b600e55565b610b43610b3d611ddb565b82611e4d565b610b5f5760405162461bcd60e51b8152600401610a2b90613239565b610ae3838383611ed2565b6001600160a01b031660009081526018602052604090205460ff1690565b6000610b938361107f565b8210610bb15760405162461bcd60e51b8152600401610a2b90612c1d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610be2611ddb565b6001600160a01b0316610bf361150a565b6001600160a01b031614610c195760405162461bcd60e51b8152600401610a2b906130c9565b6017805460ff19811660ff90911615179055565b600d5481565b610ae3838383604051806020016040528060008152506118ff565b6000610c58610ae8565b8210610c765760405162461bcd60e51b8152600401610a2b9061328a565b60088281548110610c9757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b610cb1611ddb565b6001600160a01b0316610cc261150a565b6001600160a01b031614610ce85760405162461bcd60e51b8152600401610a2b906130c9565b601455565b610cf5611ddb565b6001600160a01b0316610d0661150a565b6001600160a01b031614610d2c5760405162461bcd60e51b8152600401610a2b906130c9565b60005b81811015610ae3576000838383818110610d5957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610d6e91906127a7565b6001600160a01b03161415610d955760405162461bcd60e51b8152600401610a2b90613202565b600060186000858585818110610dbb57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610dd091906127a7565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610e0281613419565b915050610d2f565b610e12611ddb565b6001600160a01b0316610e2361150a565b6001600160a01b031614610e495760405162461bcd60e51b8152600401610a2b906130c9565b8051610e5c90601690602084019061269f565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf681604051610e8c9190612b9c565b60405180910390a150565b60175460ff1681565b610ea8611ddb565b6001600160a01b0316610eb961150a565b6001600160a01b031614610edf5760405162461bcd60e51b8152600401610a2b906130c9565b600d55565b610eec611ddb565b6001600160a01b0316610efd61150a565b6001600160a01b031614610f235760405162461bcd60e51b8152600401610a2b906130c9565b601555565b6000818152600260205260408120546001600160a01b03168061096a5760405162461bcd60e51b8152600401610a2b90612edc565b600e5481565b6060806015544210610f97575060408051808201909152600b81526a5075626c69632053616c6560a81b6020820152611036565b6013544210158015610faa575060145442105b15610fd6575060408051808201909152600a815269574c2050726573616c6560b01b6020820152611036565b6011544210158015610fe9575060125442105b15611016575060408051808201909152600b81526a5649502050726573616c6560a81b6020820152611036565b506040805180820190915260078152664e6f2053616c6560c81b60208201525b905090565b611043611ddb565b6001600160a01b031661105461150a565b6001600160a01b03161461107a5760405162461bcd60e51b8152600401610a2b906130c9565b601355565b60006001600160a01b0382166110a75760405162461bcd60e51b8152600401610a2b90612e92565b506001600160a01b031660009081526003602052604090205490565b6110cb611ddb565b6001600160a01b03166110dc61150a565b6001600160a01b0316146111025760405162461bcd60e51b8152600401610a2b906130c9565b61110c6000611fff565b565b60125481565b61111c611ddb565b6001600160a01b031661112d61150a565b6001600160a01b0316146111535760405162461bcd60e51b8152600401610a2b906130c9565b601155565b611160611ddb565b6001600160a01b031661117161150a565b6001600160a01b0316146111975760405162461bcd60e51b8152600401610a2b906130c9565b600f55565b6111a4611ddb565b6001600160a01b03166111b561150a565b6001600160a01b0316146111db5760405162461bcd60e51b8152600401610a2b906130c9565b60005b81811015610ae357600083838381811061120857634e487b7160e01b600052603260045260246000fd5b905060200201602081019061121d91906127a7565b6001600160a01b031614156112445760405162461bcd60e51b8152600401610a2b90613202565b60016018600085858581811061126a57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061127f91906127a7565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112b181613419565b9150506111de565b6112c1611ddb565b6001600160a01b03166112d261150a565b6001600160a01b0316146112f85760405162461bcd60e51b8152600401610a2b906130c9565b47806113165760405162461bcd60e51b8152600401610a2b9061309c565b6000606461132583600661337c565b61132f9190613368565b9050600061133d828461339b565b9050600061134961150a565b6001600160a01b03168260405161135f90612b24565b60006040518083038185875af1925050503d806000811461139c576040519150601f19603f3d011682016040523d82523d6000602084013e6113a1565b606091505b50509050806113c25760405162461bcd60e51b8152600401610a2b90612dfe565b600073c06ed1ae23639089cdcc2024ac725a3ef8f2e1a56001600160a01b0316846040516113ef90612b24565b60006040518083038185875af1925050503d806000811461142c576040519150601f19603f3d011682016040523d82523d6000602084013e611431565b606091505b50509050806114525760405162461bcd60e51b8152600401610a2b90612dfe565b5050505050565b60135481565b611467611ddb565b6001600160a01b031661147861150a565b6001600160a01b03161461149e5760405162461bcd60e51b8152600401610a2b906130c9565b60005b82811015610ae35760006114b3610ae8565b9050600b546114c0610ae8565b10156114f7576114f78383815181106114e957634e487b7160e01b600052603260045260246000fd5b602002602001015182612051565b508061150281613419565b9150506114a1565b600a546001600160a01b031690565b60175460ff1661153b5760405162461bcd60e51b8152600401610a2b90612be6565b600b5481611547610ae8565b6115519190613350565b111561156f5760405162461bcd60e51b8152600401610a2b90612f25565b600f548111156115915760405162461bcd60e51b8152600401610a2b90612f5c565b6010548161159e3361107f565b6115a89190613350565b11156115c65760405162461bcd60e51b8152600401610a2b906132d6565b6015544210611600573481600e546115de919061337c565b146115fb5760405162461bcd60e51b8152600401610a2b90613019565b6116fe565b6013544210158015611613575060145442105b15611673573481600d54611627919061337c565b146116445760405162461bcd60e51b8152600401610a2b90613019565b3360009081526018602052604090205460ff166115fb5760405162461bcd60e51b8152600401610a2b90612fe2565b6011544210158015611686575060125442105b156116e6573481600c5461169a919061337c565b146116b75760405162461bcd60e51b8152600401610a2b90613019565b3360009081526019602052604090205460ff166115fb5760405162461bcd60e51b8152600401610a2b90612baf565b60405162461bcd60e51b8152600401610a2b90613196565b60005b81811015611732576000611713610ae8565b905061171f3382612051565b508061172a81613419565b915050611701565b507f821f4584abe32331f65a93fcc9cc02b850db6e257e422af5ee486e6edb860fd73382604051610e8c929190612b78565b606060018054610981906133de565b61177b611ddb565b6001600160a01b031661178c61150a565b6001600160a01b0316146117b25760405162461bcd60e51b8152600401610a2b906130c9565b601055565b6117bf611ddb565b6001600160a01b03166117d061150a565b6001600160a01b0316146117f65760405162461bcd60e51b8152600401610a2b906130c9565b601255565b60115481565b611809611ddb565b6001600160a01b0316826001600160a01b0316141561183a5760405162461bcd60e51b8152600401610a2b90612d7b565b8060056000611847611ddb565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561188b611ddb565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c39190612b91565b60405180910390a35050565b60145481565b600c5481565b6001600160a01b031660009081526019602052604090205460ff1690565b600b5481565b61191061190a611ddb565b83611e4d565b61192c5760405162461bcd60e51b8152600401610a2b90613239565b6119388484848461206f565b50505050565b611946611ddb565b6001600160a01b031661195761150a565b6001600160a01b03161461197d5760405162461bcd60e51b8152600401610a2b906130c9565b600c55565b606061198d82611dbe565b6119a95760405162461bcd60e51b8152600401610a2b90613147565b60006119b36120a2565b905060008151116119d357604051806020016040528060008152506119fe565b806119dd846120b1565b6040516020016119ee929190612af5565b6040516020818303038152906040525b9392505050565b611a0d611ddb565b6001600160a01b0316611a1e61150a565b6001600160a01b031614611a445760405162461bcd60e51b8152600401610a2b906130c9565b60005b81811015610ae3576000838383818110611a7157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a8691906127a7565b6001600160a01b03161415611aad5760405162461bcd60e51b8152600401610a2b90613202565b600160196000858585818110611ad357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ae891906127a7565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611b1a81613419565b915050611a47565b60105481565b60168054611b35906133de565b80601f0160208091040260200160405190810160405280929190818152602001828054611b61906133de565b8015611bae5780601f10611b8357610100808354040283529160200191611bae565b820191906000526020600020905b815481529060010190602001808311611b9157829003601f168201915b505050505081565b60155481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600f5481565b611bf8611ddb565b6001600160a01b0316611c0961150a565b6001600160a01b031614611c2f5760405162461bcd60e51b8152600401610a2b906130c9565b6001600160a01b038116611c555760405162461bcd60e51b8152600401610a2b90612cba565b611c5e81611fff565b50565b611c69611ddb565b6001600160a01b0316611c7a61150a565b6001600160a01b031614611ca05760405162461bcd60e51b8152600401610a2b906130c9565b60005b81811015610ae3576000838383818110611ccd57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ce291906127a7565b6001600160a01b03161415611d095760405162461bcd60e51b8152600401610a2b90613202565b600060196000858585818110611d2f57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611d4491906127a7565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611d7681613419565b915050611ca3565b60006001600160e01b031982166380ac58cd60e01b1480611daf57506001600160e01b03198216635b5e139f60e01b145b8061096a575061096a826121cc565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e1482610f28565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e5882611dbe565b611e745760405162461bcd60e51b8152600401610a2b90612db2565b6000611e7f83610f28565b9050806001600160a01b0316846001600160a01b03161480611eba5750836001600160a01b0316611eaf84610a04565b6001600160a01b0316145b80611eca5750611eca8185611bbc565b949350505050565b826001600160a01b0316611ee582610f28565b6001600160a01b031614611f0b5760405162461bcd60e51b8152600401610a2b906130fe565b6001600160a01b038216611f315760405162461bcd60e51b8152600401610a2b90612d37565b611f3c8383836121e5565b611f47600082611ddf565b6001600160a01b0383166000908152600360205260408120805460019290611f7090849061339b565b90915550506001600160a01b0382166000908152600360205260408120805460019290611f9e908490613350565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61206b82826040518060200160405280600081525061226e565b5050565b61207a848484611ed2565b612086848484846122a1565b6119385760405162461bcd60e51b8152600401610a2b90612c68565b606060168054610981906133de565b6060816120d657506040805180820190915260018152600360fc1b602082015261096d565b8160005b811561210057806120ea81613419565b91506120f99050600a83613368565b91506120da565b60008167ffffffffffffffff81111561212957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612153576020820181803683370190505b5090505b8415611eca5761216860018361339b565b9150612175600a86613434565b612180906030613350565b60f81b8183815181106121a357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506121c5600a86613368565b9450612157565b6001600160e01b031981166301ffc9a760e01b14919050565b6121f0838383610ae3565b6001600160a01b03831661220c57612207816123bc565b61222f565b816001600160a01b0316836001600160a01b03161461222f5761222f8382612400565b6001600160a01b03821661224b576122468161249d565b610ae3565b826001600160a01b0316826001600160a01b031614610ae357610ae38282612576565b61227883836125ba565b61228560008484846122a1565b610ae35760405162461bcd60e51b8152600401610a2b90612c68565b60006122b5846001600160a01b0316612699565b156123b157836001600160a01b031663150b7a026122d1611ddb565b8786866040518563ffffffff1660e01b81526004016122f39493929190612b3b565b602060405180830381600087803b15801561230d57600080fd5b505af192505050801561233d575060408051601f3d908101601f1916820190925261233a91810190612995565b60015b612397573d80801561236b576040519150601f19603f3d011682016040523d82523d6000602084013e612370565b606091505b50805161238f5760405162461bcd60e51b8152600401610a2b90612c68565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611eca565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161240d8461107f565b612417919061339b565b60008381526007602052604090205490915080821461246a576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906124af9060019061339b565b600083815260096020526040812054600880549394509092849081106124e557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061251457634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061255a57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006125818361107f565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166125e05760405162461bcd60e51b8152600401610a2b90612fad565b6125e981611dbe565b156126065760405162461bcd60e51b8152600401610a2b90612d00565b612612600083836121e5565b6001600160a01b038216600090815260036020526040812080546001929061263b908490613350565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b8280546126ab906133de565b90600052602060002090601f0160209004810192826126cd5760008555612713565b82601f106126e657805160ff1916838001178555612713565b82800160010185558215612713579182015b828111156127135782518255916020019190600101906126f8565b5061271f929150612723565b5090565b5b8082111561271f5760008155600101612724565b600067ffffffffffffffff83111561275257612752613474565b612765601f8401601f1916602001613326565b905082815283838301111561277957600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461096d57600080fd5b6000602082840312156127b8578081fd5b6119fe82612790565b600080604083850312156127d3578081fd5b6127dc83612790565b91506127ea60208401612790565b90509250929050565b600080600060608486031215612807578081fd5b61281084612790565b925061281e60208501612790565b9150604084013590509250925092565b60008060008060808587031215612843578081fd5b61284c85612790565b935061285a60208601612790565b925060408501359150606085013567ffffffffffffffff81111561287c578182fd5b8501601f8101871361288c578182fd5b61289b87823560208401612738565b91505092959194509250565b600080604083850312156128b9578182fd5b6128c283612790565b9150602083013580151581146128d6578182fd5b809150509250929050565b600080604083850312156128f3578182fd5b6128fc83612790565b946020939093013593505050565b6000806020838503121561291c578182fd5b823567ffffffffffffffff80821115612933578384fd5b818501915085601f830112612946578384fd5b813581811115612954578485fd5b8660208083028501011115612967578485fd5b60209290920196919550909350505050565b60006020828403121561298a578081fd5b81356119fe8161348a565b6000602082840312156129a6578081fd5b81516119fe8161348a565b6000602082840312156129c2578081fd5b813567ffffffffffffffff8111156129d8578182fd5b8201601f810184136129e8578182fd5b611eca84823560208401612738565b600060208284031215612a08578081fd5b5035919050565b60008060408385031215612a21578182fd5b8235915060208084013567ffffffffffffffff80821115612a40578384fd5b818601915086601f830112612a53578384fd5b813581811115612a6557612a65613474565b8381029150612a75848301613326565b8181528481019084860184860187018b1015612a8f578788fd5b8795505b83861015612ab857612aa481612790565b835260019590950194918601918601612a93565b508096505050505050509250929050565b60008151808452612ae18160208601602086016133b2565b601f01601f19169290920160200192915050565b60008351612b078184602088016133b2565b835190830190612b1b8183602088016133b2565b01949350505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b6e90830184612ac9565b9695505050505050565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602082526119fe6020830184612ac9565b60208082526017908201527f596f7520617265206e6f7420696e20564950204c697374000000000000000000604082015260600190565b6020808252601f908201527f53616c65206d7573742062652061637469766520746f206d696e74204e465400604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526018908201527f5472616e73666572206661696c656420746f2041686d65640000000000000000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252601f908201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900604082015260600190565b60208082526031908201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e736040820152701034b71030903a3930b739b0b1ba34b7b760791b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b60208082526017908201527f596f7520617265206e6f742077686974656c6973746564000000000000000000604082015260600190565b60208082526017908201527f45544820616d6f756e7420697320696e636f7272656374000000000000000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b602080825260139082015272496e737566666963656e742062616c616e636560681b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252601190820152704e6f2053616c652069732041637469766560781b604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526017908201527f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b60208082526027908201527f50757263686173652065786365656473206d617820616c6c6f77656420706572604082015266081dd85b1b195d60ca1b606082015260800190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561334857613348613474565b604052919050565b6000821982111561336357613363613448565b500190565b6000826133775761337761345e565b500490565b600081600019048311821515161561339657613396613448565b500290565b6000828210156133ad576133ad613448565b500390565b60005b838110156133cd5781810151838201526020016133b5565b838111156119385750506000910152565b6002810460018216806133f257607f821691505b6020821081141561341357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561342d5761342d613448565b5060010190565b6000826134435761344361345e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611c5e57600080fdfea264697066735822122010c00a775a01975102e137c6751402868487a795e54ca0fdfcca1cf243c6f09864736f6c6343000800003300000000000000000000000000000000000000000000000000000000621451b00000000000000000000000000000000000000000000000000000000062146dd00000000000000000000000000000000000000000000000000000000062146dd00000000000000000000000000000000000000000000000000000000062158710000000000000000000000000000000000000000000000000000000006215bf50

Deployed Bytecode

0x6080604052600436106103355760003560e01c8063748a1181116101ab578063a4c818ab116100f7578063d08b11e311610095578063e985e9c51161006f578063e985e9c5146108d0578063f0292a03146108f0578063f2fde38b14610905578063f48d11af1461092557610335565b8063d08b11e314610891578063d547cfb7146108a6578063d7822c99146108bb57610335565b8063b88d4fde116100d1578063b88d4fde14610811578063c5730ee814610831578063c87b56dd14610851578063c8813ffd1461087157610335565b8063a4c818ab146107c7578063ab75c2db146107dc578063b5077f44146107fc57610335565b8063926427441161016457806399ee60901161013e57806399ee60901461075d578063a062ba381461077d578063a22cb46514610792578063a3e7868a146107b257610335565b8063926427441461071557806395d89b4114610728578063972a0f511461073d57610335565b8063748a1181146106765780637f64978314610696578063853828b6146106b6578063860a2e6d146106cb57806389bcb73c146106e05780638da5cb5b1461070057610335565b806353980d9311610285578063639bdee71161022357806370a08231116101fd57806370a082311461060c578063715018a61461062c57806371c83a5714610641578063742e71f21461065657610335565b8063639bdee7146105c257806368428a1b146105d757806369625ae5146105ec57610335565b8063564566a81161025f578063564566a81461054d57806359a165cc146105625780635fee68da146105825780636352211e146105a257610335565b806353980d93146104ed578063548db1741461050d57806355f804b31461052d57610335565b806323b872dd116102f257806334918dfd116102cc57806334918dfd146104835780633c93ba391461049857806342842e0e146104ad5780634f6ccce7146104cd57610335565b806323b872dd146104235780632660a92e146104435780632f745c591461046357610335565b806301ffc9a71461033a57806306fdde0314610370578063081812fc14610392578063095ea7b3146103bf57806318160ddd146103e157806322f574b514610403575b600080fd5b34801561034657600080fd5b5061035a610355366004612979565b610945565b6040516103679190612b91565b60405180910390f35b34801561037c57600080fd5b50610385610972565b6040516103679190612b9c565b34801561039e57600080fd5b506103b26103ad3660046129f7565b610a04565b6040516103679190612b27565b3480156103cb57600080fd5b506103df6103da3660046128e1565b610a50565b005b3480156103ed57600080fd5b506103f6610ae8565b604051610367919061331d565b34801561040f57600080fd5b506103df61041e3660046129f7565b610aee565b34801561042f57600080fd5b506103df61043e3660046127f3565b610b32565b34801561044f57600080fd5b5061035a61045e3660046127a7565b610b6a565b34801561046f57600080fd5b506103f661047e3660046128e1565b610b88565b34801561048f57600080fd5b506103df610bda565b3480156104a457600080fd5b506103f6610c2d565b3480156104b957600080fd5b506103df6104c83660046127f3565b610c33565b3480156104d957600080fd5b506103f66104e83660046129f7565b610c4e565b3480156104f957600080fd5b506103df6105083660046129f7565b610ca9565b34801561051957600080fd5b506103df61052836600461290a565b610ced565b34801561053957600080fd5b506103df6105483660046129b1565b610e0a565b34801561055957600080fd5b5061035a610e97565b34801561056e57600080fd5b506103df61057d3660046129f7565b610ea0565b34801561058e57600080fd5b506103df61059d3660046129f7565b610ee4565b3480156105ae57600080fd5b506103b26105bd3660046129f7565b610f28565b3480156105ce57600080fd5b506103f6610f5d565b3480156105e357600080fd5b50610385610f63565b3480156105f857600080fd5b506103df6106073660046129f7565b61103b565b34801561061857600080fd5b506103f66106273660046127a7565b61107f565b34801561063857600080fd5b506103df6110c3565b34801561064d57600080fd5b506103f661110e565b34801561066257600080fd5b506103df6106713660046129f7565b611114565b34801561068257600080fd5b506103df6106913660046129f7565b611158565b3480156106a257600080fd5b506103df6106b136600461290a565b61119c565b3480156106c257600080fd5b506103df6112b9565b3480156106d757600080fd5b506103f6611459565b3480156106ec57600080fd5b506103df6106fb366004612a0f565b61145f565b34801561070c57600080fd5b506103b261150a565b6103df6107233660046129f7565b611519565b34801561073457600080fd5b50610385611764565b34801561074957600080fd5b506103df6107583660046129f7565b611773565b34801561076957600080fd5b506103df6107783660046129f7565b6117b7565b34801561078957600080fd5b506103f66117fb565b34801561079e57600080fd5b506103df6107ad3660046128a7565b611801565b3480156107be57600080fd5b506103f66118cf565b3480156107d357600080fd5b506103f66118d5565b3480156107e857600080fd5b5061035a6107f73660046127a7565b6118db565b34801561080857600080fd5b506103f66118f9565b34801561081d57600080fd5b506103df61082c36600461282e565b6118ff565b34801561083d57600080fd5b506103df61084c3660046129f7565b61193e565b34801561085d57600080fd5b5061038561086c3660046129f7565b611982565b34801561087d57600080fd5b506103df61088c36600461290a565b611a05565b34801561089d57600080fd5b506103f6611b22565b3480156108b257600080fd5b50610385611b28565b3480156108c757600080fd5b506103f6611bb6565b3480156108dc57600080fd5b5061035a6108eb3660046127c1565b611bbc565b3480156108fc57600080fd5b506103f6611bea565b34801561091157600080fd5b506103df6109203660046127a7565b611bf0565b34801561093157600080fd5b506103df61094036600461290a565b611c61565b60006001600160e01b0319821663780e9d6360e01b148061096a575061096a82611d7e565b90505b919050565b606060008054610981906133de565b80601f01602080910402602001604051908101604052809291908181526020018280546109ad906133de565b80156109fa5780601f106109cf576101008083540402835291602001916109fa565b820191906000526020600020905b8154815290600101906020018083116109dd57829003601f168201915b5050505050905090565b6000610a0f82611dbe565b610a345760405162461bcd60e51b8152600401610a2b90613050565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610a5b82610f28565b9050806001600160a01b0316836001600160a01b03161415610a8f5760405162461bcd60e51b8152600401610a2b906131c1565b806001600160a01b0316610aa1611ddb565b6001600160a01b03161480610abd5750610abd816108eb611ddb565b610ad95760405162461bcd60e51b8152600401610a2b90612e35565b610ae38383611ddf565b505050565b60085490565b610af6611ddb565b6001600160a01b0316610b0761150a565b6001600160a01b031614610b2d5760405162461bcd60e51b8152600401610a2b906130c9565b600e55565b610b43610b3d611ddb565b82611e4d565b610b5f5760405162461bcd60e51b8152600401610a2b90613239565b610ae3838383611ed2565b6001600160a01b031660009081526018602052604090205460ff1690565b6000610b938361107f565b8210610bb15760405162461bcd60e51b8152600401610a2b90612c1d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610be2611ddb565b6001600160a01b0316610bf361150a565b6001600160a01b031614610c195760405162461bcd60e51b8152600401610a2b906130c9565b6017805460ff19811660ff90911615179055565b600d5481565b610ae3838383604051806020016040528060008152506118ff565b6000610c58610ae8565b8210610c765760405162461bcd60e51b8152600401610a2b9061328a565b60088281548110610c9757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b610cb1611ddb565b6001600160a01b0316610cc261150a565b6001600160a01b031614610ce85760405162461bcd60e51b8152600401610a2b906130c9565b601455565b610cf5611ddb565b6001600160a01b0316610d0661150a565b6001600160a01b031614610d2c5760405162461bcd60e51b8152600401610a2b906130c9565b60005b81811015610ae3576000838383818110610d5957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610d6e91906127a7565b6001600160a01b03161415610d955760405162461bcd60e51b8152600401610a2b90613202565b600060186000858585818110610dbb57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610dd091906127a7565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610e0281613419565b915050610d2f565b610e12611ddb565b6001600160a01b0316610e2361150a565b6001600160a01b031614610e495760405162461bcd60e51b8152600401610a2b906130c9565b8051610e5c90601690602084019061269f565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf681604051610e8c9190612b9c565b60405180910390a150565b60175460ff1681565b610ea8611ddb565b6001600160a01b0316610eb961150a565b6001600160a01b031614610edf5760405162461bcd60e51b8152600401610a2b906130c9565b600d55565b610eec611ddb565b6001600160a01b0316610efd61150a565b6001600160a01b031614610f235760405162461bcd60e51b8152600401610a2b906130c9565b601555565b6000818152600260205260408120546001600160a01b03168061096a5760405162461bcd60e51b8152600401610a2b90612edc565b600e5481565b6060806015544210610f97575060408051808201909152600b81526a5075626c69632053616c6560a81b6020820152611036565b6013544210158015610faa575060145442105b15610fd6575060408051808201909152600a815269574c2050726573616c6560b01b6020820152611036565b6011544210158015610fe9575060125442105b15611016575060408051808201909152600b81526a5649502050726573616c6560a81b6020820152611036565b506040805180820190915260078152664e6f2053616c6560c81b60208201525b905090565b611043611ddb565b6001600160a01b031661105461150a565b6001600160a01b03161461107a5760405162461bcd60e51b8152600401610a2b906130c9565b601355565b60006001600160a01b0382166110a75760405162461bcd60e51b8152600401610a2b90612e92565b506001600160a01b031660009081526003602052604090205490565b6110cb611ddb565b6001600160a01b03166110dc61150a565b6001600160a01b0316146111025760405162461bcd60e51b8152600401610a2b906130c9565b61110c6000611fff565b565b60125481565b61111c611ddb565b6001600160a01b031661112d61150a565b6001600160a01b0316146111535760405162461bcd60e51b8152600401610a2b906130c9565b601155565b611160611ddb565b6001600160a01b031661117161150a565b6001600160a01b0316146111975760405162461bcd60e51b8152600401610a2b906130c9565b600f55565b6111a4611ddb565b6001600160a01b03166111b561150a565b6001600160a01b0316146111db5760405162461bcd60e51b8152600401610a2b906130c9565b60005b81811015610ae357600083838381811061120857634e487b7160e01b600052603260045260246000fd5b905060200201602081019061121d91906127a7565b6001600160a01b031614156112445760405162461bcd60e51b8152600401610a2b90613202565b60016018600085858581811061126a57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061127f91906127a7565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112b181613419565b9150506111de565b6112c1611ddb565b6001600160a01b03166112d261150a565b6001600160a01b0316146112f85760405162461bcd60e51b8152600401610a2b906130c9565b47806113165760405162461bcd60e51b8152600401610a2b9061309c565b6000606461132583600661337c565b61132f9190613368565b9050600061133d828461339b565b9050600061134961150a565b6001600160a01b03168260405161135f90612b24565b60006040518083038185875af1925050503d806000811461139c576040519150601f19603f3d011682016040523d82523d6000602084013e6113a1565b606091505b50509050806113c25760405162461bcd60e51b8152600401610a2b90612dfe565b600073c06ed1ae23639089cdcc2024ac725a3ef8f2e1a56001600160a01b0316846040516113ef90612b24565b60006040518083038185875af1925050503d806000811461142c576040519150601f19603f3d011682016040523d82523d6000602084013e611431565b606091505b50509050806114525760405162461bcd60e51b8152600401610a2b90612dfe565b5050505050565b60135481565b611467611ddb565b6001600160a01b031661147861150a565b6001600160a01b03161461149e5760405162461bcd60e51b8152600401610a2b906130c9565b60005b82811015610ae35760006114b3610ae8565b9050600b546114c0610ae8565b10156114f7576114f78383815181106114e957634e487b7160e01b600052603260045260246000fd5b602002602001015182612051565b508061150281613419565b9150506114a1565b600a546001600160a01b031690565b60175460ff1661153b5760405162461bcd60e51b8152600401610a2b90612be6565b600b5481611547610ae8565b6115519190613350565b111561156f5760405162461bcd60e51b8152600401610a2b90612f25565b600f548111156115915760405162461bcd60e51b8152600401610a2b90612f5c565b6010548161159e3361107f565b6115a89190613350565b11156115c65760405162461bcd60e51b8152600401610a2b906132d6565b6015544210611600573481600e546115de919061337c565b146115fb5760405162461bcd60e51b8152600401610a2b90613019565b6116fe565b6013544210158015611613575060145442105b15611673573481600d54611627919061337c565b146116445760405162461bcd60e51b8152600401610a2b90613019565b3360009081526018602052604090205460ff166115fb5760405162461bcd60e51b8152600401610a2b90612fe2565b6011544210158015611686575060125442105b156116e6573481600c5461169a919061337c565b146116b75760405162461bcd60e51b8152600401610a2b90613019565b3360009081526019602052604090205460ff166115fb5760405162461bcd60e51b8152600401610a2b90612baf565b60405162461bcd60e51b8152600401610a2b90613196565b60005b81811015611732576000611713610ae8565b905061171f3382612051565b508061172a81613419565b915050611701565b507f821f4584abe32331f65a93fcc9cc02b850db6e257e422af5ee486e6edb860fd73382604051610e8c929190612b78565b606060018054610981906133de565b61177b611ddb565b6001600160a01b031661178c61150a565b6001600160a01b0316146117b25760405162461bcd60e51b8152600401610a2b906130c9565b601055565b6117bf611ddb565b6001600160a01b03166117d061150a565b6001600160a01b0316146117f65760405162461bcd60e51b8152600401610a2b906130c9565b601255565b60115481565b611809611ddb565b6001600160a01b0316826001600160a01b0316141561183a5760405162461bcd60e51b8152600401610a2b90612d7b565b8060056000611847611ddb565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561188b611ddb565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c39190612b91565b60405180910390a35050565b60145481565b600c5481565b6001600160a01b031660009081526019602052604090205460ff1690565b600b5481565b61191061190a611ddb565b83611e4d565b61192c5760405162461bcd60e51b8152600401610a2b90613239565b6119388484848461206f565b50505050565b611946611ddb565b6001600160a01b031661195761150a565b6001600160a01b03161461197d5760405162461bcd60e51b8152600401610a2b906130c9565b600c55565b606061198d82611dbe565b6119a95760405162461bcd60e51b8152600401610a2b90613147565b60006119b36120a2565b905060008151116119d357604051806020016040528060008152506119fe565b806119dd846120b1565b6040516020016119ee929190612af5565b6040516020818303038152906040525b9392505050565b611a0d611ddb565b6001600160a01b0316611a1e61150a565b6001600160a01b031614611a445760405162461bcd60e51b8152600401610a2b906130c9565b60005b81811015610ae3576000838383818110611a7157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a8691906127a7565b6001600160a01b03161415611aad5760405162461bcd60e51b8152600401610a2b90613202565b600160196000858585818110611ad357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ae891906127a7565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611b1a81613419565b915050611a47565b60105481565b60168054611b35906133de565b80601f0160208091040260200160405190810160405280929190818152602001828054611b61906133de565b8015611bae5780601f10611b8357610100808354040283529160200191611bae565b820191906000526020600020905b815481529060010190602001808311611b9157829003601f168201915b505050505081565b60155481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600f5481565b611bf8611ddb565b6001600160a01b0316611c0961150a565b6001600160a01b031614611c2f5760405162461bcd60e51b8152600401610a2b906130c9565b6001600160a01b038116611c555760405162461bcd60e51b8152600401610a2b90612cba565b611c5e81611fff565b50565b611c69611ddb565b6001600160a01b0316611c7a61150a565b6001600160a01b031614611ca05760405162461bcd60e51b8152600401610a2b906130c9565b60005b81811015610ae3576000838383818110611ccd57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ce291906127a7565b6001600160a01b03161415611d095760405162461bcd60e51b8152600401610a2b90613202565b600060196000858585818110611d2f57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611d4491906127a7565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611d7681613419565b915050611ca3565b60006001600160e01b031982166380ac58cd60e01b1480611daf57506001600160e01b03198216635b5e139f60e01b145b8061096a575061096a826121cc565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e1482610f28565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e5882611dbe565b611e745760405162461bcd60e51b8152600401610a2b90612db2565b6000611e7f83610f28565b9050806001600160a01b0316846001600160a01b03161480611eba5750836001600160a01b0316611eaf84610a04565b6001600160a01b0316145b80611eca5750611eca8185611bbc565b949350505050565b826001600160a01b0316611ee582610f28565b6001600160a01b031614611f0b5760405162461bcd60e51b8152600401610a2b906130fe565b6001600160a01b038216611f315760405162461bcd60e51b8152600401610a2b90612d37565b611f3c8383836121e5565b611f47600082611ddf565b6001600160a01b0383166000908152600360205260408120805460019290611f7090849061339b565b90915550506001600160a01b0382166000908152600360205260408120805460019290611f9e908490613350565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61206b82826040518060200160405280600081525061226e565b5050565b61207a848484611ed2565b612086848484846122a1565b6119385760405162461bcd60e51b8152600401610a2b90612c68565b606060168054610981906133de565b6060816120d657506040805180820190915260018152600360fc1b602082015261096d565b8160005b811561210057806120ea81613419565b91506120f99050600a83613368565b91506120da565b60008167ffffffffffffffff81111561212957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612153576020820181803683370190505b5090505b8415611eca5761216860018361339b565b9150612175600a86613434565b612180906030613350565b60f81b8183815181106121a357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506121c5600a86613368565b9450612157565b6001600160e01b031981166301ffc9a760e01b14919050565b6121f0838383610ae3565b6001600160a01b03831661220c57612207816123bc565b61222f565b816001600160a01b0316836001600160a01b03161461222f5761222f8382612400565b6001600160a01b03821661224b576122468161249d565b610ae3565b826001600160a01b0316826001600160a01b031614610ae357610ae38282612576565b61227883836125ba565b61228560008484846122a1565b610ae35760405162461bcd60e51b8152600401610a2b90612c68565b60006122b5846001600160a01b0316612699565b156123b157836001600160a01b031663150b7a026122d1611ddb565b8786866040518563ffffffff1660e01b81526004016122f39493929190612b3b565b602060405180830381600087803b15801561230d57600080fd5b505af192505050801561233d575060408051601f3d908101601f1916820190925261233a91810190612995565b60015b612397573d80801561236b576040519150601f19603f3d011682016040523d82523d6000602084013e612370565b606091505b50805161238f5760405162461bcd60e51b8152600401610a2b90612c68565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611eca565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161240d8461107f565b612417919061339b565b60008381526007602052604090205490915080821461246a576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906124af9060019061339b565b600083815260096020526040812054600880549394509092849081106124e557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061251457634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061255a57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006125818361107f565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166125e05760405162461bcd60e51b8152600401610a2b90612fad565b6125e981611dbe565b156126065760405162461bcd60e51b8152600401610a2b90612d00565b612612600083836121e5565b6001600160a01b038216600090815260036020526040812080546001929061263b908490613350565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b8280546126ab906133de565b90600052602060002090601f0160209004810192826126cd5760008555612713565b82601f106126e657805160ff1916838001178555612713565b82800160010185558215612713579182015b828111156127135782518255916020019190600101906126f8565b5061271f929150612723565b5090565b5b8082111561271f5760008155600101612724565b600067ffffffffffffffff83111561275257612752613474565b612765601f8401601f1916602001613326565b905082815283838301111561277957600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461096d57600080fd5b6000602082840312156127b8578081fd5b6119fe82612790565b600080604083850312156127d3578081fd5b6127dc83612790565b91506127ea60208401612790565b90509250929050565b600080600060608486031215612807578081fd5b61281084612790565b925061281e60208501612790565b9150604084013590509250925092565b60008060008060808587031215612843578081fd5b61284c85612790565b935061285a60208601612790565b925060408501359150606085013567ffffffffffffffff81111561287c578182fd5b8501601f8101871361288c578182fd5b61289b87823560208401612738565b91505092959194509250565b600080604083850312156128b9578182fd5b6128c283612790565b9150602083013580151581146128d6578182fd5b809150509250929050565b600080604083850312156128f3578182fd5b6128fc83612790565b946020939093013593505050565b6000806020838503121561291c578182fd5b823567ffffffffffffffff80821115612933578384fd5b818501915085601f830112612946578384fd5b813581811115612954578485fd5b8660208083028501011115612967578485fd5b60209290920196919550909350505050565b60006020828403121561298a578081fd5b81356119fe8161348a565b6000602082840312156129a6578081fd5b81516119fe8161348a565b6000602082840312156129c2578081fd5b813567ffffffffffffffff8111156129d8578182fd5b8201601f810184136129e8578182fd5b611eca84823560208401612738565b600060208284031215612a08578081fd5b5035919050565b60008060408385031215612a21578182fd5b8235915060208084013567ffffffffffffffff80821115612a40578384fd5b818601915086601f830112612a53578384fd5b813581811115612a6557612a65613474565b8381029150612a75848301613326565b8181528481019084860184860187018b1015612a8f578788fd5b8795505b83861015612ab857612aa481612790565b835260019590950194918601918601612a93565b508096505050505050509250929050565b60008151808452612ae18160208601602086016133b2565b601f01601f19169290920160200192915050565b60008351612b078184602088016133b2565b835190830190612b1b8183602088016133b2565b01949350505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b6e90830184612ac9565b9695505050505050565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602082526119fe6020830184612ac9565b60208082526017908201527f596f7520617265206e6f7420696e20564950204c697374000000000000000000604082015260600190565b6020808252601f908201527f53616c65206d7573742062652061637469766520746f206d696e74204e465400604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526018908201527f5472616e73666572206661696c656420746f2041686d65640000000000000000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252601f908201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900604082015260600190565b60208082526031908201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e736040820152701034b71030903a3930b739b0b1ba34b7b760791b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b60208082526017908201527f596f7520617265206e6f742077686974656c6973746564000000000000000000604082015260600190565b60208082526017908201527f45544820616d6f756e7420697320696e636f7272656374000000000000000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b602080825260139082015272496e737566666963656e742062616c616e636560681b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252601190820152704e6f2053616c652069732041637469766560781b604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526017908201527f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b60208082526027908201527f50757263686173652065786365656473206d617820616c6c6f77656420706572604082015266081dd85b1b195d60ca1b606082015260800190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561334857613348613474565b604052919050565b6000821982111561336357613363613448565b500190565b6000826133775761337761345e565b500490565b600081600019048311821515161561339657613396613448565b500290565b6000828210156133ad576133ad613448565b500390565b60005b838110156133cd5781810151838201526020016133b5565b838111156119385750506000910152565b6002810460018216806133f257607f821691505b6020821081141561341357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561342d5761342d613448565b5060010190565b6000826134435761344361345e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611c5e57600080fdfea264697066735822122010c00a775a01975102e137c6751402868487a795e54ca0fdfcca1cf243c6f09864736f6c63430008000033

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

00000000000000000000000000000000000000000000000000000000621451b00000000000000000000000000000000000000000000000000000000062146dd00000000000000000000000000000000000000000000000000000000062146dd00000000000000000000000000000000000000000000000000000000062158710000000000000000000000000000000000000000000000000000000006215bf50

-----Decoded View---------------
Arg [0] : _vipPresaleStartTimestamp (uint256): 1645498800
Arg [1] : _vipPresaleEndTimestamp (uint256): 1645506000
Arg [2] : _wlPresaleStartTimestamp (uint256): 1645506000
Arg [3] : _wlPresaleEndTimestamp (uint256): 1645578000
Arg [4] : _publicSaleStartTimestamp (uint256): 1645592400

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000621451b0
Arg [1] : 0000000000000000000000000000000000000000000000000000000062146dd0
Arg [2] : 0000000000000000000000000000000000000000000000000000000062146dd0
Arg [3] : 0000000000000000000000000000000000000000000000000000000062158710
Arg [4] : 000000000000000000000000000000000000000000000000000000006215bf50


Deployed Bytecode Sourcemap

43246:7586:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34646:224;;;;;;;;;;-1:-1:-1;34646:224:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21549:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23108:221::-;;;;;;;;;;-1:-1:-1;23108:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22631:411::-;;;;;;;;;;-1:-1:-1;22631:411:0;;;;;:::i;:::-;;:::i;:::-;;35286:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;48994:110::-;;;;;;;;;;-1:-1:-1;48994:110:0;;;;;:::i;:::-;;:::i;23998:339::-;;;;;;;;;;-1:-1:-1;23998:339:0;;;;;:::i;:::-;;:::i;45318:114::-;;;;;;;;;;-1:-1:-1;45318:114:0;;;;;:::i;:::-;;:::i;34954:256::-;;;;;;;;;;-1:-1:-1;34954:256:0;;;;;:::i;:::-;;:::i;46112:89::-;;;;;;;;;;;;;:::i;43399:43::-;;;;;;;;;;;;;:::i;24408:185::-;;;;;;;;;;-1:-1:-1;24408:185:0;;;;;:::i;:::-;;:::i;35476:233::-;;;;;;;;;;-1:-1:-1;35476:233:0;;;;;:::i;:::-;;:::i;49619:153::-;;;;;;;;;;-1:-1:-1;49619:153:0;;;;;:::i;:::-;;:::i;45028:282::-;;;;;;;;;;-1:-1:-1;45028:282:0;;;;;:::i;:::-;;:::i;48608:140::-;;;;;;;;;;-1:-1:-1;48608:140:0;;;;;:::i;:::-;;:::i;43848:31::-;;;;;;;;;;;;;:::i;48876:110::-;;;;;;;;;;-1:-1:-1;48876:110:0;;;;;:::i;:::-;;:::i;49780:165::-;;;;;;;;;;-1:-1:-1;49780:165:0;;;;;:::i;:::-;;:::i;21243:239::-;;;;;;;;;;-1:-1:-1;21243:239:0;;;;;:::i;:::-;;:::i;43449:43::-;;;;;;;;;;;;;:::i;48042:558::-;;;;;;;;;;;;;:::i;49450:161::-;;;;;;;;;;-1:-1:-1;49450:161:0;;;;;:::i;:::-;;:::i;20973:208::-;;;;;;;;;;-1:-1:-1;20973:208:0;;;;;:::i;:::-;;:::i;42443:94::-;;;;;;;;;;;;;:::i;43629:37::-;;;;;;;;;;;;;:::i;49112:165::-;;;;;;;;;;-1:-1:-1;49112:165:0;;;;;:::i;:::-;;:::i;49953:94::-;;;;;;;;;;-1:-1:-1;49953:94:0;;;;;:::i;:::-;;:::i;44744:276::-;;;;;;;;;;-1:-1:-1;44744:276:0;;;;;:::i;:::-;;:::i;50295:532::-;;;;;;;;;;;;;:::i;43675:38::-;;;;;;;;;;;;;:::i;46209:349::-;;;;;;;;;;-1:-1:-1;46209:349:0;;;;;:::i;:::-;;:::i;41792:87::-;;;;;;;;;;;;;:::i;46566:1468::-;;;;;;:::i;:::-;;:::i;21718:104::-;;;;;;;;;;;;;:::i;50055:107::-;;;;;;;;;;-1:-1:-1;50055:107:0;;;;;:::i;:::-;;:::i;49285:157::-;;;;;;;;;;-1:-1:-1;49285:157:0;;;;;:::i;:::-;;:::i;43583:39::-;;;;;;;;;;;;;:::i;23401:295::-;;;;;;;;;;-1:-1:-1;23401:295:0;;;;;:::i;:::-;;:::i;43720:36::-;;;;;;;;;;;;;:::i;43347:45::-;;;;;;;;;;;;;:::i;46002:102::-;;;;;;;;;;-1:-1:-1;46002:102:0;;;;;:::i;:::-;;:::i;43302:36::-;;;;;;;;;;;;;:::i;24664:328::-;;;;;;;;;;-1:-1:-1;24664:328:0;;;;;:::i;:::-;;:::i;48756:112::-;;;;;;;;;;-1:-1:-1;48756:112:0;;;;;:::i;:::-;;:::i;21893:334::-;;;;;;;;;;-1:-1:-1;21893:334:0;;;;;:::i;:::-;;:::i;45440:270::-;;;;;;;;;;-1:-1:-1;45440:270:0;;;;;:::i;:::-;;:::i;43539:35::-;;;;;;;;;;;;;:::i;43813:26::-;;;;;;;;;;;;;:::i;43765:39::-;;;;;;;;;;;;;:::i;23767:164::-;;;;;;;;;;-1:-1:-1;23767:164:0;;;;;:::i;:::-;;:::i;43499:29::-;;;;;;;;;;;;;:::i;42692:192::-;;;;;;;;;;-1:-1:-1;42692:192:0;;;;;:::i;:::-;;:::i;45718:276::-;;;;;;;;;;-1:-1:-1;45718:276:0;;;;;:::i;:::-;;:::i;34646:224::-;34748:4;-1:-1:-1;;;;;;34772:50:0;;-1:-1:-1;;;34772:50:0;;:90;;;34826:36;34850:11;34826:23;:36::i;:::-;34765:97;;34646:224;;;;:::o;21549:100::-;21603:13;21636:5;21629:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21549:100;:::o;23108:221::-;23184:7;23212:16;23220:7;23212;:16::i;:::-;23204:73;;;;-1:-1:-1;;;23204:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;23297:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23297:24:0;;23108:221::o;22631:411::-;22712:13;22728:23;22743:7;22728:14;:23::i;:::-;22712:39;;22776:5;-1:-1:-1;;;;;22770:11:0;:2;-1:-1:-1;;;;;22770:11:0;;;22762:57;;;;-1:-1:-1;;;22762:57:0;;;;;;;:::i;:::-;22870:5;-1:-1:-1;;;;;22854:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;22854:21:0;;:62;;;;22879:37;22896:5;22903:12;:10;:12::i;22879:37::-;22832:168;;;;-1:-1:-1;;;22832:168:0;;;;;;;:::i;:::-;23013:21;23022:2;23026:7;23013:8;:21::i;:::-;22631:411;;;:::o;35286:113::-;35374:10;:17;35286:113;:::o;48994:110::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;49070:16:::1;:26:::0;48994:110::o;23998:339::-;24193:41;24212:12;:10;:12::i;:::-;24226:7;24193:18;:41::i;:::-;24185:103;;;;-1:-1:-1;;;24185:103:0;;;;;;;:::i;:::-;24301:28;24311:4;24317:2;24321:7;24301:9;:28::i;45318:114::-;-1:-1:-1;;;;;45407:17:0;45383:4;45407:17;;;:11;:17;;;;;;;;;45318:114::o;34954:256::-;35051:7;35087:23;35104:5;35087:16;:23::i;:::-;35079:5;:31;35071:87;;;;-1:-1:-1;;;35071:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;35176:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;34954:256::o;46112:89::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;46181:12:::1;::::0;;-1:-1:-1;;46165:28:0;::::1;46181:12;::::0;;::::1;46180:13;46165:28;::::0;;46112:89::o;43399:43::-;;;;:::o;24408:185::-;24546:39;24563:4;24569:2;24573:7;24546:39;;;;;;;;;;;;:16;:39::i;35476:233::-;35551:7;35587:30;:28;:30::i;:::-;35579:5;:38;35571:95;;;;-1:-1:-1;;;35571:95:0;;;;;;;:::i;:::-;35684:10;35695:5;35684:17;;;;;;-1:-1:-1;;;35684:17:0;;;;;;;;;;;;;;;;;35677:24;;35476:233;;;:::o;49619:153::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;49718:21:::1;:46:::0;49619:153::o;45028:282::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;45122:9:::1;45117:186;45137:20:::0;;::::1;45117:186;;;45211:1;45187:9:::0;;45197:1;45187:12;;::::1;;;-1:-1:-1::0;;;45187:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45187:26:0::1;;;45179:62;;;;-1:-1:-1::0;;;45179:62:0::1;;;;;;;:::i;:::-;45286:5;45258:11;:25;45270:9;;45280:1;45270:12;;;;;-1:-1:-1::0;;;45270:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45258:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;45258:25:0;:33;;-1:-1:-1;;45258:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45159:3;::::1;::::0;::::1;:::i;:::-;;;;45117:186;;48608:140:::0;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;48679:22;;::::1;::::0;:12:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;48717:23;48732:7;48717:23;;;;;;:::i;:::-;;;;;;;;48608:140:::0;:::o;43848:31::-;;;;;;:::o;48876:110::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;48952:16:::1;:26:::0;48876:110::o;49780:165::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;49885:24:::1;:52:::0;49780:165::o;21243:239::-;21315:7;21351:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21351:16:0;21386:19;21378:73;;;;-1:-1:-1;;;21378:73:0;;;;;;;:::i;43449:43::-;;;;:::o;48042:558::-;48084:13;48110:18;48162:24;;48143:15;:43;48140:431;;-1:-1:-1;48203:20:0;;;;;;;;;;;;-1:-1:-1;;;48203:20:0;;;;48140:431;;;48263:23;;48244:15;:42;;:85;;;;;48308:21;;48290:15;:39;48244:85;48241:330;;;-1:-1:-1;48346:19:0;;;;;;;;;;;;-1:-1:-1;;;48346:19:0;;;;48241:330;;;48405:24;;48386:15;:43;;:87;;;;;48451:22;;48433:15;:40;48386:87;48383:188;;;-1:-1:-1;48490:20:0;;;;;;;;;;;;-1:-1:-1;;;48490:20:0;;;;48383:188;;;-1:-1:-1;48543:16:0;;;;;;;;;;;;-1:-1:-1;;;48543:16:0;;;;48383:188;48588:4;-1:-1:-1;48042:558:0;:::o;49450:161::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;49553:23:::1;:50:::0;49450:161::o;20973:208::-;21045:7;-1:-1:-1;;;;;21073:19:0;;21065:74;;;;-1:-1:-1;;;21065:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21157:16:0;;;;;:9;:16;;;;;;;20973:208::o;42443:94::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;42508:21:::1;42526:1;42508:9;:21::i;:::-;42443:94::o:0;43629:37::-;;;;:::o;49112:165::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;49217:24:::1;:52:::0;49112:165::o;49953:94::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;50021:8:::1;:18:::0;49953:94::o;44744:276::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;44833:9:::1;44828:185;44848:20:::0;;::::1;44828:185;;;44922:1;44898:9:::0;;44908:1;44898:12;;::::1;;;-1:-1:-1::0;;;44898:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44898:26:0::1;;;44890:62;;;;-1:-1:-1::0;;;44890:62:0::1;;;;;;;:::i;:::-;44997:4;44969:11;:25;44981:9;;44991:1;44981:12;;;;;-1:-1:-1::0;;;44981:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44969:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44969:25:0;:32;;-1:-1:-1;;44969:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44870:3;::::1;::::0;::::1;:::i;:::-;;;;44828:185;;50295:532:::0;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;50364:21:::1;50404:11:::0;50396:43:::1;;;;-1:-1:-1::0;;;50396:43:0::1;;;;;;;:::i;:::-;50450:13;50482:3;50467:11;:7:::0;50477:1:::1;50467:11;:::i;:::-;50466:19;;;;:::i;:::-;50450:35:::0;-1:-1:-1;50497:16:0::1;50516:15;50450:35:::0;50516:7;:15:::1;:::i;:::-;50497:34;;50543:12;50569:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;50561:21:0::1;50590:8;50561:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50542:61;;;50622:7;50614:44;;;;-1:-1:-1::0;;;50614:44:0::1;;;;;;;:::i;:::-;50670:13;50697:42;-1:-1:-1::0;;;;;50689:56:0::1;50753:5;50689:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50669:94;;;50782:8;50774:45;;;;-1:-1:-1::0;;;50774:45:0::1;;;;;;;:::i;:::-;42083:1;;;;;50295:532::o:0;43675:38::-;;;;:::o;46209:349::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;46327:6:::1;46322:229;46343:12;46339:1;:16;46322:229;;;46377:11;46391:13;:11;:13::i;:::-;46377:27;;46439:14;;46423:13;:11;:13::i;:::-;:30;46419:121;;;46488:36;46498:14;46513:1;46498:17;;;;;;-1:-1:-1::0;;;46498:17:0::1;;;;;;;;;;;;;;;46517:6;46488:9;:36::i;:::-;-1:-1:-1::0;46357:3:0;::::1;::::0;::::1;:::i;:::-;;;;46322:229;;41792:87:::0;41865:6;;-1:-1:-1;;;;;41865:6:0;41792:87;:::o;46566:1468::-;46641:12;;;;46633:56;;;;-1:-1:-1;;;46633:56:0;;;;;;;:::i;:::-;46740:14;;46724:12;46708:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:46;;46700:90;;;;-1:-1:-1;;;46700:90:0;;;;;;;:::i;:::-;46825:8;;46809:12;:24;;46801:86;;;;-1:-1:-1;;;46801:86:0;;;;;;;:::i;:::-;46946:14;;46930:12;46906:21;46916:10;46906:9;:21::i;:::-;:36;;;;:::i;:::-;:54;;46898:106;;;;-1:-1:-1;;;46898:106:0;;;;;;;:::i;:::-;47039:24;;47020:15;:43;47017:785;;47123:9;47107:12;47088:16;;:31;;;;:::i;:::-;:44;47080:80;;;;-1:-1:-1;;;47080:80:0;;;;;;;:::i;:::-;47017:785;;;47200:23;;47181:15;:42;;:85;;;;;47245:21;;47227:15;:39;47181:85;47178:624;;;47326:9;47310:12;47291:16;;:31;;;;:::i;:::-;:44;47283:80;;;;-1:-1:-1;;;47283:80:0;;;;;;;:::i;:::-;47398:10;47386:23;;;;:11;:23;;;;;;;;47378:59;;;;-1:-1:-1;;;47378:59:0;;;;;;;:::i;47178:624::-;47477:24;;47458:15;:43;;:87;;;;;47523:22;;47505:15;:40;47458:87;47455:347;;;47606:9;47590:12;47570:17;;:32;;;;:::i;:::-;:45;47562:81;;;;-1:-1:-1;;;47562:81:0;;;;;;;:::i;:::-;47674:10;47666:19;;;;:7;:19;;;;;;;;47658:55;;;;-1:-1:-1;;;47658:55:0;;;;;;;:::i;47455:347::-;47755:35;;-1:-1:-1;;;47755:35:0;;;;;;;:::i;:::-;47827:9;47822:148;47846:12;47842:1;:16;47822:148;;;47880:15;47898:13;:11;:13::i;:::-;47880:31;;47928:30;47938:10;47950:7;47928:9;:30::i;:::-;-1:-1:-1;47860:3:0;;;;:::i;:::-;;;;47822:148;;;;47987:39;48001:10;48013:12;47987:39;;;;;;;:::i;21718:104::-;21774:13;21807:7;21800:14;;;;;:::i;50055:107::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;50130:14:::1;:24:::0;50055:107::o;49285:157::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;49386:22:::1;:48:::0;49285:157::o;43583:39::-;;;;:::o;23401:295::-;23516:12;:10;:12::i;:::-;-1:-1:-1;;;;;23504:24:0;:8;-1:-1:-1;;;;;23504:24:0;;;23496:62;;;;-1:-1:-1;;;23496:62:0;;;;;;;:::i;:::-;23616:8;23571:18;:32;23590:12;:10;:12::i;:::-;-1:-1:-1;;;;;23571:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;23571:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;23571:53:0;;;;;;;;;;;23655:12;:10;:12::i;:::-;-1:-1:-1;;;;;23640:48:0;;23679:8;23640:48;;;;;;:::i;:::-;;;;;;;;23401:295;;:::o;43720:36::-;;;;:::o;43347:45::-;;;;:::o;46002:102::-;-1:-1:-1;;;;;46083:13:0;46059:4;46083:13;;;:7;:13;;;;;;;;;46002:102::o;43302:36::-;;;;:::o;24664:328::-;24839:41;24858:12;:10;:12::i;:::-;24872:7;24839:18;:41::i;:::-;24831:103;;;;-1:-1:-1;;;24831:103:0;;;;;;;:::i;:::-;24945:39;24959:4;24965:2;24969:7;24978:5;24945:13;:39::i;:::-;24664:328;;;;:::o;48756:112::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;48833:17:::1;:27:::0;48756:112::o;21893:334::-;21966:13;22000:16;22008:7;22000;:16::i;:::-;21992:76;;;;-1:-1:-1;;;21992:76:0;;;;;;;:::i;:::-;22081:21;22105:10;:8;:10::i;:::-;22081:34;;22157:1;22139:7;22133:21;:25;:86;;;;;;;;;;;;;;;;;22185:7;22194:18;:7;:16;:18::i;:::-;22168:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22133:86;22126:93;21893:334;-1:-1:-1;;;21893:334:0:o;45440:270::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;45527:9:::1;45522:181;45542:20:::0;;::::1;45522:181;;;45616:1;45592:9:::0;;45602:1;45592:12;;::::1;;;-1:-1:-1::0;;;45592:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45592:26:0::1;;;45584:62;;;;-1:-1:-1::0;;;45584:62:0::1;;;;;;;:::i;:::-;45687:4;45663:7;:21;45671:9;;45681:1;45671:12;;;;;-1:-1:-1::0;;;45671:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45663:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;45663:21:0;:28;;-1:-1:-1;;45663:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45564:3;::::1;::::0;::::1;:::i;:::-;;;;45522:181;;43539:35:::0;;;;:::o;43813:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43765:39::-;;;;:::o;23767:164::-;-1:-1:-1;;;;;23888:25:0;;;23864:4;23888:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23767:164::o;43499:29::-;;;;:::o;42692:192::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42781:22:0;::::1;42773:73;;;;-1:-1:-1::0;;;42773:73:0::1;;;;;;;:::i;:::-;42857:19;42867:8;42857:9;:19::i;:::-;42692:192:::0;:::o;45718:276::-;42023:12;:10;:12::i;:::-;-1:-1:-1;;;;;42012:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;42012:23:0;;42004:68;;;;-1:-1:-1;;;42004:68:0;;;;;;;:::i;:::-;45810:9:::1;45805:182;45825:20:::0;;::::1;45805:182;;;45899:1;45875:9:::0;;45885:1;45875:12;;::::1;;;-1:-1:-1::0;;;45875:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45875:26:0::1;;;45867:62;;;;-1:-1:-1::0;;;45867:62:0::1;;;;;;;:::i;:::-;45970:5;45946:7;:21;45954:9;;45964:1;45954:12;;;;;-1:-1:-1::0;;;45954:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45946:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;45946:21:0;:29;;-1:-1:-1;;45946:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45847:3;::::1;::::0;::::1;:::i;:::-;;;;45805:182;;20604:305:::0;20706:4;-1:-1:-1;;;;;;20743:40:0;;-1:-1:-1;;;20743:40:0;;:105;;-1:-1:-1;;;;;;;20800:48:0;;-1:-1:-1;;;20800:48:0;20743:105;:158;;;;20865:36;20889:11;20865:23;:36::i;26502:127::-;26567:4;26591:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26591:16:0;:30;;;26502:127::o;16036:98::-;16116:10;16036:98;:::o;30484:174::-;30559:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30559:29:0;-1:-1:-1;;;;;30559:29:0;;;;;;;;:24;;30613:23;30559:24;30613:14;:23::i;:::-;-1:-1:-1;;;;;30604:46:0;;;;;;;;;;;30484:174;;:::o;26796:348::-;26889:4;26914:16;26922:7;26914;:16::i;:::-;26906:73;;;;-1:-1:-1;;;26906:73:0;;;;;;;:::i;:::-;26990:13;27006:23;27021:7;27006:14;:23::i;:::-;26990:39;;27059:5;-1:-1:-1;;;;;27048:16:0;:7;-1:-1:-1;;;;;27048:16:0;;:51;;;;27092:7;-1:-1:-1;;;;;27068:31:0;:20;27080:7;27068:11;:20::i;:::-;-1:-1:-1;;;;;27068:31:0;;27048:51;:87;;;;27103:32;27120:5;27127:7;27103:16;:32::i;:::-;27040:96;26796:348;-1:-1:-1;;;;26796:348:0:o;29788:578::-;29947:4;-1:-1:-1;;;;;29920:31:0;:23;29935:7;29920:14;:23::i;:::-;-1:-1:-1;;;;;29920:31:0;;29912:85;;;;-1:-1:-1;;;29912:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30016:16:0;;30008:65;;;;-1:-1:-1;;;30008:65:0;;;;;;;:::i;:::-;30086:39;30107:4;30113:2;30117:7;30086:20;:39::i;:::-;30190:29;30207:1;30211:7;30190:8;:29::i;:::-;-1:-1:-1;;;;;30232:15:0;;;;;;:9;:15;;;;;:20;;30251:1;;30232:15;:20;;30251:1;;30232:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30263:13:0;;;;;;:9;:13;;;;;:18;;30280:1;;30263:13;:18;;30280:1;;30263:18;:::i;:::-;;;;-1:-1:-1;;30292:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30292:21:0;-1:-1:-1;;;;;30292:21:0;;;;;;;;;30331:27;;30292:16;;30331:27;;;;;;;29788:578;;;:::o;42892:173::-;42967:6;;;-1:-1:-1;;;;;42984:17:0;;;-1:-1:-1;;;;;;42984:17:0;;;;;;;43017:40;;42967:6;;;42984:17;42967:6;;43017:40;;42948:16;;43017:40;42892:173;;:::o;27486:110::-;27562:26;27572:2;27576:7;27562:26;;;;;;;;;;;;:9;:26::i;:::-;27486:110;;:::o;25874:315::-;26031:28;26041:4;26047:2;26051:7;26031:9;:28::i;:::-;26078:48;26101:4;26107:2;26111:7;26120:5;26078:22;:48::i;:::-;26070:111;;;;-1:-1:-1;;;26070:111:0;;;;;;;:::i;50174:113::-;50234:13;50267:12;50260:19;;;;;:::i;16563:723::-;16619:13;16840:10;16836:53;;-1:-1:-1;16867:10:0;;;;;;;;;;;;-1:-1:-1;;;16867:10:0;;;;;;16836:53;16914:5;16899:12;16955:78;16962:9;;16955:78;;16988:8;;;;:::i;:::-;;-1:-1:-1;17011:10:0;;-1:-1:-1;17019:2:0;17011:10;;:::i;:::-;;;16955:78;;;17043:19;17075:6;17065:17;;;;;;-1:-1:-1;;;17065:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17065:17:0;;17043:39;;17093:154;17100:10;;17093:154;;17127:11;17137:1;17127:11;;:::i;:::-;;-1:-1:-1;17196:10:0;17204:2;17196:5;:10;:::i;:::-;17183:24;;:2;:24;:::i;:::-;17170:39;;17153:6;17160;17153:14;;;;;;-1:-1:-1;;;17153:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;17153:56:0;;;;;;;;-1:-1:-1;17224:11:0;17233:2;17224:11;;:::i;:::-;;;17093:154;;19120:157;-1:-1:-1;;;;;;19229:40:0;;-1:-1:-1;;;19229:40:0;19120:157;;;:::o;36322:589::-;36466:45;36493:4;36499:2;36503:7;36466:26;:45::i;:::-;-1:-1:-1;;;;;36528:18:0;;36524:187;;36563:40;36595:7;36563:31;:40::i;:::-;36524:187;;;36633:2;-1:-1:-1;;;;;36625:10:0;:4;-1:-1:-1;;;;;36625:10:0;;36621:90;;36652:47;36685:4;36691:7;36652:32;:47::i;:::-;-1:-1:-1;;;;;36725:16:0;;36721:183;;36758:45;36795:7;36758:36;:45::i;:::-;36721:183;;;36831:4;-1:-1:-1;;;;;36825:10:0;:2;-1:-1:-1;;;;;36825:10:0;;36821:83;;36852:40;36880:2;36884:7;36852:27;:40::i;27823:321::-;27953:18;27959:2;27963:7;27953:5;:18::i;:::-;28004:54;28035:1;28039:2;28043:7;28052:5;28004:22;:54::i;:::-;27982:154;;;;-1:-1:-1;;;27982:154:0;;;;;;;:::i;31223:799::-;31378:4;31399:15;:2;-1:-1:-1;;;;;31399:13:0;;:15::i;:::-;31395:620;;;31451:2;-1:-1:-1;;;;;31435:36:0;;31472:12;:10;:12::i;:::-;31486:4;31492:7;31501:5;31435:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31435:72:0;;;;;;;;-1:-1:-1;;31435:72:0;;;;;;;;;;;;:::i;:::-;;;31431:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31677:13:0;;31673:272;;31720:60;;-1:-1:-1;;;31720:60:0;;;;;;;:::i;31673:272::-;31895:6;31889:13;31880:6;31876:2;31872:15;31865:38;31431:529;-1:-1:-1;;;;;;31558:51:0;-1:-1:-1;;;31558:51:0;;-1:-1:-1;31551:58:0;;31395:620;-1:-1:-1;31999:4:0;31223:799;;;;;;:::o;37634:164::-;37738:10;:17;;37711:24;;;;:15;:24;;;;;:44;;;37766:24;;;;;;;;;;;;37634:164::o;38425:988::-;38691:22;38741:1;38716:22;38733:4;38716:16;:22::i;:::-;:26;;;;:::i;:::-;38753:18;38774:26;;;:17;:26;;;;;;38691:51;;-1:-1:-1;38907:28:0;;;38903:328;;-1:-1:-1;;;;;38974:18:0;;38952:19;38974:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39025:30;;;;;;:44;;;39142:30;;:17;:30;;;;;:43;;;38903:328;-1:-1:-1;39327:26:0;;;;:17;:26;;;;;;;;39320:33;;;-1:-1:-1;;;;;39371:18:0;;;;;:12;:18;;;;;:34;;;;;;;39364:41;38425:988::o;39708:1079::-;39986:10;:17;39961:22;;39986:21;;40006:1;;39986:21;:::i;:::-;40018:18;40039:24;;;:15;:24;;;;;;40412:10;:26;;39961:46;;-1:-1:-1;40039:24:0;;39961:46;;40412:26;;;;-1:-1:-1;;;40412:26:0;;;;;;;;;;;;;;;;;40390:48;;40476:11;40451:10;40462;40451:22;;;;;;-1:-1:-1;;;40451:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;40556:28;;;:15;:28;;;;;;;:41;;;40728:24;;;;;40721:31;40763:10;:16;;;;;-1:-1:-1;;;40763:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;39708:1079;;;;:::o;37212:221::-;37297:14;37314:20;37331:2;37314:16;:20::i;:::-;-1:-1:-1;;;;;37345:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37390:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37212:221:0:o;28480:382::-;-1:-1:-1;;;;;28560:16:0;;28552:61;;;;-1:-1:-1;;;28552:61:0;;;;;;;:::i;:::-;28633:16;28641:7;28633;:16::i;:::-;28632:17;28624:58;;;;-1:-1:-1;;;28624:58:0;;;;;;;:::i;:::-;28695:45;28724:1;28728:2;28732:7;28695:20;:45::i;:::-;-1:-1:-1;;;;;28753:13:0;;;;;;:9;:13;;;;;:18;;28770:1;;28753:13;:18;;28770:1;;28753:18;:::i;:::-;;;;-1:-1:-1;;28782:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28782:21:0;-1:-1:-1;;;;;28782:21:0;;;;;;;;28821:33;;28782:16;;;28821:33;;28782:16;;28821:33;28480:382;;:::o;8078:387::-;8401:20;8449:8;;;8078:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:409:1;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:1;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:175::-;498:20;;-1:-1:-1;;;;;547:31:1;;537:42;;527:2;;593:1;590;583:12;608:198;;720:2;708:9;699:7;695:23;691:32;688:2;;;741:6;733;726:22;688:2;769:31;790:9;769:31;:::i;811:274::-;;;940:2;928:9;919:7;915:23;911:32;908:2;;;961:6;953;946:22;908:2;989:31;1010:9;989:31;:::i;:::-;979:41;;1039:40;1075:2;1064:9;1060:18;1039:40;:::i;:::-;1029:50;;898:187;;;;;:::o;1090:342::-;;;;1236:2;1224:9;1215:7;1211:23;1207:32;1204:2;;;1257:6;1249;1242:22;1204:2;1285:31;1306:9;1285:31;:::i;:::-;1275:41;;1335:40;1371:2;1360:9;1356:18;1335:40;:::i;:::-;1325:50;;1422:2;1411:9;1407:18;1394:32;1384:42;;1194:238;;;;;:::o;1437:702::-;;;;;1609:3;1597:9;1588:7;1584:23;1580:33;1577:2;;;1631:6;1623;1616:22;1577:2;1659:31;1680:9;1659:31;:::i;:::-;1649:41;;1709:40;1745:2;1734:9;1730:18;1709:40;:::i;:::-;1699:50;;1796:2;1785:9;1781:18;1768:32;1758:42;;1851:2;1840:9;1836:18;1823:32;1878:18;1870:6;1867:30;1864:2;;;1915:6;1907;1900:22;1864:2;1943:22;;1996:4;1988:13;;1984:27;-1:-1:-1;1974:2:1;;2030:6;2022;2015:22;1974:2;2058:75;2125:7;2120:2;2107:16;2102:2;2098;2094:11;2058:75;:::i;:::-;2048:85;;;1567:572;;;;;;;:::o;2144:369::-;;;2270:2;2258:9;2249:7;2245:23;2241:32;2238:2;;;2291:6;2283;2276:22;2238:2;2319:31;2340:9;2319:31;:::i;:::-;2309:41;;2400:2;2389:9;2385:18;2372:32;2447:5;2440:13;2433:21;2426:5;2423:32;2413:2;;2474:6;2466;2459:22;2413:2;2502:5;2492:15;;;2228:285;;;;;:::o;2518:266::-;;;2647:2;2635:9;2626:7;2622:23;2618:32;2615:2;;;2668:6;2660;2653:22;2615:2;2696:31;2717:9;2696:31;:::i;:::-;2686:41;2774:2;2759:18;;;;2746:32;;-1:-1:-1;;;2605:179:1:o;2789:666::-;;;2936:2;2924:9;2915:7;2911:23;2907:32;2904:2;;;2957:6;2949;2942:22;2904:2;3002:9;2989:23;3031:18;3072:2;3064:6;3061:14;3058:2;;;3093:6;3085;3078:22;3058:2;3136:6;3125:9;3121:22;3111:32;;3181:7;3174:4;3170:2;3166:13;3162:27;3152:2;;3208:6;3200;3193:22;3152:2;3253;3240:16;3279:2;3271:6;3268:14;3265:2;;;3300:6;3292;3285:22;3265:2;3359:7;3354:2;3348;3340:6;3336:15;3332:2;3328:24;3324:33;3321:46;3318:2;;;3385:6;3377;3370:22;3318:2;3421;3413:11;;;;;3443:6;;-1:-1:-1;2894:561:1;;-1:-1:-1;;;;2894:561:1:o;3460:257::-;;3571:2;3559:9;3550:7;3546:23;3542:32;3539:2;;;3592:6;3584;3577:22;3539:2;3636:9;3623:23;3655:32;3681:5;3655:32;:::i;3722:261::-;;3844:2;3832:9;3823:7;3819:23;3815:32;3812:2;;;3865:6;3857;3850:22;3812:2;3902:9;3896:16;3921:32;3947:5;3921:32;:::i;3988:482::-;;4110:2;4098:9;4089:7;4085:23;4081:32;4078:2;;;4131:6;4123;4116:22;4078:2;4176:9;4163:23;4209:18;4201:6;4198:30;4195:2;;;4246:6;4238;4231:22;4195:2;4274:22;;4327:4;4319:13;;4315:27;-1:-1:-1;4305:2:1;;4361:6;4353;4346:22;4305:2;4389:75;4456:7;4451:2;4438:16;4433:2;4429;4425:11;4389:75;:::i;4475:190::-;;4587:2;4575:9;4566:7;4562:23;4558:32;4555:2;;;4608:6;4600;4593:22;4555:2;-1:-1:-1;4636:23:1;;4545:120;-1:-1:-1;4545:120:1:o;4670:1078::-;;;4824:2;4812:9;4803:7;4799:23;4795:32;4792:2;;;4845:6;4837;4830:22;4792:2;4886:9;4873:23;4863:33;;4915:2;4968;4957:9;4953:18;4940:32;4991:18;5032:2;5024:6;5021:14;5018:2;;;5053:6;5045;5038:22;5018:2;5096:6;5085:9;5081:22;5071:32;;5141:7;5134:4;5130:2;5126:13;5122:27;5112:2;;5168:6;5160;5153:22;5112:2;5209;5196:16;5231:2;5227;5224:10;5221:2;;;5237:18;;:::i;:::-;5284:2;5280;5276:11;5266:21;;5307:27;5330:2;5326;5322:11;5307:27;:::i;:::-;5368:15;;;5399:12;;;;5431:11;;;5461;;;5457:20;;5454:33;-1:-1:-1;5451:2:1;;;5505:6;5497;5490:22;5451:2;5532:6;5523:15;;5547:171;5561:2;5558:1;5555:9;5547:171;;;5618:25;5639:3;5618:25;:::i;:::-;5606:38;;5579:1;5572:9;;;;;5664:12;;;;5696;;5547:171;;;5551:3;5737:5;5727:15;;;;;;;;4782:966;;;;;:::o;5753:259::-;;5834:5;5828:12;5861:6;5856:3;5849:19;5877:63;5933:6;5926:4;5921:3;5917:14;5910:4;5903:5;5899:16;5877:63;:::i;:::-;5994:2;5973:15;-1:-1:-1;;5969:29:1;5960:39;;;;6001:4;5956:50;;5804:208;-1:-1:-1;;5804:208:1:o;6017:470::-;;6234:6;6228:13;6250:53;6296:6;6291:3;6284:4;6276:6;6272:17;6250:53;:::i;:::-;6366:13;;6325:16;;;;6388:57;6366:13;6325:16;6422:4;6410:17;;6388:57;:::i;:::-;6461:20;;6204:283;-1:-1:-1;;;;6204:283:1:o;6492:205::-;6692:3;6683:14::o;6702:203::-;-1:-1:-1;;;;;6866:32:1;;;;6848:51;;6836:2;6821:18;;6803:102::o;6910:490::-;-1:-1:-1;;;;;7179:15:1;;;7161:34;;7231:15;;7226:2;7211:18;;7204:43;7278:2;7263:18;;7256:34;;;7326:3;7321:2;7306:18;;7299:31;;;6910:490;;7347:47;;7374:19;;7366:6;7347:47;:::i;:::-;7339:55;7113:287;-1:-1:-1;;;;;;7113:287:1:o;7405:274::-;-1:-1:-1;;;;;7597:32:1;;;;7579:51;;7661:2;7646:18;;7639:34;7567:2;7552:18;;7534:145::o;7684:187::-;7849:14;;7842:22;7824:41;;7812:2;7797:18;;7779:92::o;7876:221::-;;8025:2;8014:9;8007:21;8045:46;8087:2;8076:9;8072:18;8064:6;8045:46;:::i;8102:347::-;8304:2;8286:21;;;8343:2;8323:18;;;8316:30;8382:25;8377:2;8362:18;;8355:53;8440:2;8425:18;;8276:173::o;8454:355::-;8656:2;8638:21;;;8695:2;8675:18;;;8668:30;8734:33;8729:2;8714:18;;8707:61;8800:2;8785:18;;8628:181::o;8814:407::-;9016:2;8998:21;;;9055:2;9035:18;;;9028:30;9094:34;9089:2;9074:18;;9067:62;-1:-1:-1;;;9160:2:1;9145:18;;9138:41;9211:3;9196:19;;8988:233::o;9226:414::-;9428:2;9410:21;;;9467:2;9447:18;;;9440:30;9506:34;9501:2;9486:18;;9479:62;-1:-1:-1;;;9572:2:1;9557:18;;9550:48;9630:3;9615:19;;9400:240::o;9645:402::-;9847:2;9829:21;;;9886:2;9866:18;;;9859:30;9925:34;9920:2;9905:18;;9898:62;-1:-1:-1;;;9991:2:1;9976:18;;9969:36;10037:3;10022:19;;9819:228::o;10052:352::-;10254:2;10236:21;;;10293:2;10273:18;;;10266:30;10332;10327:2;10312:18;;10305:58;10395:2;10380:18;;10226:178::o;10409:400::-;10611:2;10593:21;;;10650:2;10630:18;;;10623:30;10689:34;10684:2;10669:18;;10662:62;-1:-1:-1;;;10755:2:1;10740:18;;10733:34;10799:3;10784:19;;10583:226::o;10814:349::-;11016:2;10998:21;;;11055:2;11035:18;;;11028:30;11094:27;11089:2;11074:18;;11067:55;11154:2;11139:18;;10988:175::o;11168:408::-;11370:2;11352:21;;;11409:2;11389:18;;;11382:30;11448:34;11443:2;11428:18;;11421:62;-1:-1:-1;;;11514:2:1;11499:18;;11492:42;11566:3;11551:19;;11342:234::o;11581:348::-;11783:2;11765:21;;;11822:2;11802:18;;;11795:30;11861:26;11856:2;11841:18;;11834:54;11920:2;11905:18;;11755:174::o;11934:420::-;12136:2;12118:21;;;12175:2;12155:18;;;12148:30;12214:34;12209:2;12194:18;;12187:62;12285:26;12280:2;12265:18;;12258:54;12344:3;12329:19;;12108:246::o;12359:406::-;12561:2;12543:21;;;12600:2;12580:18;;;12573:30;12639:34;12634:2;12619:18;;12612:62;-1:-1:-1;;;12705:2:1;12690:18;;12683:40;12755:3;12740:19;;12533:232::o;12770:405::-;12972:2;12954:21;;;13011:2;12991:18;;;12984:30;13050:34;13045:2;13030:18;;13023:62;-1:-1:-1;;;13116:2:1;13101:18;;13094:39;13165:3;13150:19;;12944:231::o;13180:355::-;13382:2;13364:21;;;13421:2;13401:18;;;13394:30;13460:33;13455:2;13440:18;;13433:61;13526:2;13511:18;;13354:181::o;13540:413::-;13742:2;13724:21;;;13781:2;13761:18;;;13754:30;13820:34;13815:2;13800:18;;13793:62;-1:-1:-1;;;13886:2:1;13871:18;;13864:47;13943:3;13928:19;;13714:239::o;13958:356::-;14160:2;14142:21;;;14179:18;;;14172:30;14238:34;14233:2;14218:18;;14211:62;14305:2;14290:18;;14132:182::o;14319:347::-;14521:2;14503:21;;;14560:2;14540:18;;;14533:30;14599:25;14594:2;14579:18;;14572:53;14657:2;14642:18;;14493:173::o;14671:347::-;14873:2;14855:21;;;14912:2;14892:18;;;14885:30;14951:25;14946:2;14931:18;;14924:53;15009:2;14994:18;;14845:173::o;15023:408::-;15225:2;15207:21;;;15264:2;15244:18;;;15237:30;15303:34;15298:2;15283:18;;15276:62;-1:-1:-1;;;15369:2:1;15354:18;;15347:42;15421:3;15406:19;;15197:234::o;15436:343::-;15638:2;15620:21;;;15677:2;15657:18;;;15650:30;-1:-1:-1;;;15711:2:1;15696:18;;15689:49;15770:2;15755:18;;15610:169::o;15784:356::-;15986:2;15968:21;;;16005:18;;;15998:30;16064:34;16059:2;16044:18;;16037:62;16131:2;16116:18;;15958:182::o;16145:405::-;16347:2;16329:21;;;16386:2;16366:18;;;16359:30;16425:34;16420:2;16405:18;;16398:62;-1:-1:-1;;;16491:2:1;16476:18;;16469:39;16540:3;16525:19;;16319:231::o;16555:411::-;16757:2;16739:21;;;16796:2;16776:18;;;16769:30;16835:34;16830:2;16815:18;;16808:62;-1:-1:-1;;;16901:2:1;16886:18;;16879:45;16956:3;16941:19;;16729:237::o;16971:341::-;17173:2;17155:21;;;17212:2;17192:18;;;17185:30;-1:-1:-1;;;17246:2:1;17231:18;;17224:47;17303:2;17288:18;;17145:167::o;17317:397::-;17519:2;17501:21;;;17558:2;17538:18;;;17531:30;17597:34;17592:2;17577:18;;17570:62;-1:-1:-1;;;17663:2:1;17648:18;;17641:31;17704:3;17689:19;;17491:223::o;17719:347::-;17921:2;17903:21;;;17960:2;17940:18;;;17933:30;17999:25;17994:2;17979:18;;17972:53;18057:2;18042:18;;17893:173::o;18071:413::-;18273:2;18255:21;;;18312:2;18292:18;;;18285:30;18351:34;18346:2;18331:18;;18324:62;-1:-1:-1;;;18417:2:1;18402:18;;18395:47;18474:3;18459:19;;18245:239::o;18489:408::-;18691:2;18673:21;;;18730:2;18710:18;;;18703:30;18769:34;18764:2;18749:18;;18742:62;-1:-1:-1;;;18835:2:1;18820:18;;18813:42;18887:3;18872:19;;18663:234::o;18902:403::-;19104:2;19086:21;;;19143:2;19123:18;;;19116:30;19182:34;19177:2;19162:18;;19155:62;-1:-1:-1;;;19248:2:1;19233:18;;19226:37;19295:3;19280:19;;19076:229::o;19310:177::-;19456:25;;;19444:2;19429:18;;19411:76::o;19492:251::-;19562:2;19556:9;19592:17;;;19639:18;19624:34;;19660:22;;;19621:62;19618:2;;;19686:18;;:::i;:::-;19722:2;19715:22;19536:207;;-1:-1:-1;19536:207:1:o;19748:128::-;;19819:1;19815:6;19812:1;19809:13;19806:2;;;19825:18;;:::i;:::-;-1:-1:-1;19861:9:1;;19796:80::o;19881:120::-;;19947:1;19937:2;;19952:18;;:::i;:::-;-1:-1:-1;19986:9:1;;19927:74::o;20006:168::-;;20112:1;20108;20104:6;20100:14;20097:1;20094:21;20089:1;20082:9;20075:17;20071:45;20068:2;;;20119:18;;:::i;:::-;-1:-1:-1;20159:9:1;;20058:116::o;20179:125::-;;20247:1;20244;20241:8;20238:2;;;20252:18;;:::i;:::-;-1:-1:-1;20289:9:1;;20228:76::o;20309:258::-;20381:1;20391:113;20405:6;20402:1;20399:13;20391:113;;;20481:11;;;20475:18;20462:11;;;20455:39;20427:2;20420:10;20391:113;;;20522:6;20519:1;20516:13;20513:2;;;-1:-1:-1;;20557:1:1;20539:16;;20532:27;20362:205::o;20572:380::-;20657:1;20647:12;;20704:1;20694:12;;;20715:2;;20769:4;20761:6;20757:17;20747:27;;20715:2;20822;20814:6;20811:14;20791:18;20788:38;20785:2;;;20868:10;20863:3;20859:20;20856:1;20849:31;20903:4;20900:1;20893:15;20931:4;20928:1;20921:15;20785:2;;20627:325;;;:::o;20957:135::-;;-1:-1:-1;;21017:17:1;;21014:2;;;21037:18;;:::i;:::-;-1:-1:-1;21084:1:1;21073:13;;21004:88::o;21097:112::-;;21155:1;21145:2;;21160:18;;:::i;:::-;-1:-1:-1;21194:9:1;;21135:74::o;21214:127::-;21275:10;21270:3;21266:20;21263:1;21256:31;21306:4;21303:1;21296:15;21330:4;21327:1;21320:15;21346:127;21407:10;21402:3;21398:20;21395:1;21388:31;21438:4;21435:1;21428:15;21462:4;21459:1;21452:15;21478:127;21539:10;21534:3;21530:20;21527:1;21520:31;21570:4;21567:1;21560:15;21594:4;21591:1;21584:15;21610:133;-1:-1:-1;;;;;;21686:32:1;;21676:43;;21666:2;;21733:1;21730;21723:12

Swarm Source

ipfs://10c00a775a01975102e137c6751402868487a795e54ca0fdfcca1cf243c6f098
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.