ETH Price: $3,278.48 (-3.87%)
Gas: 18 Gwei

Token

Tikka Tiger NFT (TKT)
 

Overview

Max Total Supply

2,921 TKT

Holders

416

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 TKT
0x5ac66fd378b47e4f9fab77968777736607d8b2d5
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:
Tikkatest

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

// File: contracts/Tikka_Tiger_NFT.sol

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/Tikkatest.sol

pragma solidity >=0.7.0 <0.9.0;



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

  string public baseURI;
  string public baseExtension = ".json";
  string public notRevealedUri;
  uint256 public cost = 0 ether;
  uint256 public maxSupply = 28888;
  uint256 public maxMintAmount = 550;
  uint256 public nftPerAddressLimit = 5;
  bool public paused = false;
  bool public revealed = true;
  bool public onlyWhitelisted = true;
  address[] public whitelistedAddresses;
  mapping(address => uint256) public addressMintedBalance;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
  }

  // internal
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  // public
  function mint(uint256 _mintAmount) public payable {
    require(!paused, "the contract is paused");
    uint256 supply = totalSupply();
    require(_mintAmount > 0, "need to mint at least 1 NFT");
    require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded");
    require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");

    if (msg.sender != owner()) {
        if(onlyWhitelisted == true) {
            require(isWhitelisted(msg.sender), "user is not whitelisted");
            uint256 ownerMintedCount = addressMintedBalance[msg.sender];
            require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded");
        }
        require(msg.value >= cost * _mintAmount, "insufficient funds");
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      addressMintedBalance[msg.sender]++;
      _safeMint(msg.sender, supply + i);
    }
  }
  
  function isWhitelisted(address _user) public view returns (bool) {
    for (uint i = 0; i < whitelistedAddresses.length; i++) {
      if (whitelistedAddresses[i] == _user) {
          return true;
      }
    }
    return false;
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

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

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

  //only owner
  function reveal() public onlyOwner {
      revealed = true;
  }
  
  function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
    nftPerAddressLimit = _limit;
  }
  
  function setCost(uint256 _newCost) public onlyOwner {
    cost = _newCost;
  }

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

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

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

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
  
  function setOnlyWhitelisted(bool _state) public onlyOwner {
    onlyWhitelisted = _state;
  }
  
  function whitelistUsers(address[] calldata _users) public onlyOwner {
    delete whitelistedAddresses;
    whitelistedAddresses = _users;
  }
 
  function withdraw() public payable onlyOwner {
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200034f565b506000600e556170d8600f5561022660105560056011556000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff021916908315150217905550348015620000c657600080fd5b5060405162004fe138038062004fe18339818101604052810190620000ec919062000471565b83838160009080519060200190620001069291906200034f565b5080600190805190602001906200011f9291906200034f565b50505062000142620001366200016e60201b60201c565b6200017660201b60201c565b62000153826200023c60201b60201c565b62000164816200026860201b60201c565b50505050620006e7565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200024c6200029460201b60201c565b80600b9080519060200190620002649291906200034f565b5050565b620002786200029460201b60201c565b80600d9080519060200190620002909291906200034f565b5050565b620002a46200016e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002ca6200032560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000323576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031a9062000583565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200035d9062000653565b90600052602060002090601f016020900481019282620003815760008555620003cd565b82601f106200039c57805160ff1916838001178555620003cd565b82800160010185558215620003cd579182015b82811115620003cc578251825591602001919060010190620003af565b5b509050620003dc9190620003e0565b5090565b5b80821115620003fb576000816000905550600101620003e1565b5090565b6000620004166200041084620005d9565b620005a5565b9050828152602081018484840111156200042f57600080fd5b6200043c8482856200061d565b509392505050565b600082601f8301126200045657600080fd5b815162000468848260208601620003ff565b91505092915050565b600080600080608085870312156200048857600080fd5b600085015167ffffffffffffffff811115620004a357600080fd5b620004b18782880162000444565b945050602085015167ffffffffffffffff811115620004cf57600080fd5b620004dd8782880162000444565b935050604085015167ffffffffffffffff811115620004fb57600080fd5b620005098782880162000444565b925050606085015167ffffffffffffffff8111156200052757600080fd5b620005358782880162000444565b91505092959194509250565b6000620005506020836200060c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200059e8162000541565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620005cf57620005ce620006b8565b5b8060405250919050565b600067ffffffffffffffff821115620005f757620005f6620006b8565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b838110156200063d57808201518184015260208101905062000620565b838111156200064d576000848401525b50505050565b600060028204905060018216806200066c57607f821691505b6020821081141562000683576200068262000689565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148ea80620006f76000396000f3fe6080604052600436106102725760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb011461095c578063da3ef23f14610987578063e985e9c5146109b0578063edec5f27146109ed578063f2c4ce1e14610a16578063f2fde38b14610a3f57610272565b8063b88d4fde1461083a578063ba4e5c4914610863578063ba7d2c76146108a0578063c6682862146108cb578063c87b56dd146108f6578063d0eb26b01461093357610272565b80638da5cb5b116101135780638da5cb5b1461075d57806395d89b41146107885780639c70b512146107b3578063a0712d68146107de578063a22cb465146107fa578063a475b5dd1461082357610272565b80636352211e146106785780636c0360eb146106b557806370a08231146106e0578063715018a61461071d5780637f00c7a61461073457610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906135ae565b610a68565b6040516102ab91906140af565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613585565b610ae2565b005b3480156102e957600080fd5b506102f2610b07565b6040516102ff91906140ca565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613641565b610b99565b60405161033c9190614026565b60405180910390f35b34801561035157600080fd5b5061035a610bdf565b60405161036791906140ca565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613504565b610c6d565b005b3480156103a557600080fd5b506103ae610d85565b6040516103bb91906143cc565b60405180910390f35b3480156103d057600080fd5b506103d9610d8b565b6040516103e691906143cc565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613399565b610d98565b60405161042391906143cc565b60405180910390f35b34801561043857600080fd5b50610441610db0565b60405161044e91906143cc565b60405180910390f35b34801561046357600080fd5b5061047e600480360381019061047991906133fe565b610db6565b005b34801561048c57600080fd5b506104a760048036038101906104a29190613504565b610e16565b6040516104b491906143cc565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613399565b610ebb565b6040516104f191906140af565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190613585565b610f90565b005b61052b610fb5565b005b34801561053957600080fd5b50610554600480360381019061054f91906133fe565b61103d565b005b34801561056257600080fd5b5061057d60048036038101906105789190613399565b61105d565b60405161058a919061408d565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190613641565b611157565b005b3480156105c857600080fd5b506105e360048036038101906105de9190613641565b611169565b6040516105f091906143cc565b60405180910390f35b34801561060557600080fd5b5061060e611200565b60405161061b91906140af565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613600565b611213565b005b34801561065957600080fd5b50610662611235565b60405161066f91906140af565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190613641565b611248565b6040516106ac9190614026565b60405180910390f35b3480156106c157600080fd5b506106ca6112fa565b6040516106d791906140ca565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613399565b611388565b60405161071491906143cc565b60405180910390f35b34801561072957600080fd5b50610732611440565b005b34801561074057600080fd5b5061075b60048036038101906107569190613641565b611454565b005b34801561076957600080fd5b50610772611466565b60405161077f9190614026565b60405180910390f35b34801561079457600080fd5b5061079d611490565b6040516107aa91906140ca565b60405180910390f35b3480156107bf57600080fd5b506107c8611522565b6040516107d591906140af565b60405180910390f35b6107f860048036038101906107f39190613641565b611535565b005b34801561080657600080fd5b50610821600480360381019061081c91906134c8565b61187e565b005b34801561082f57600080fd5b50610838611894565b005b34801561084657600080fd5b50610861600480360381019061085c919061344d565b6118b9565b005b34801561086f57600080fd5b5061088a60048036038101906108859190613641565b61191b565b6040516108979190614026565b60405180910390f35b3480156108ac57600080fd5b506108b561195a565b6040516108c291906143cc565b60405180910390f35b3480156108d757600080fd5b506108e0611960565b6040516108ed91906140ca565b60405180910390f35b34801561090257600080fd5b5061091d60048036038101906109189190613641565b6119ee565b60405161092a91906140ca565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613641565b611b47565b005b34801561096857600080fd5b50610971611b59565b60405161097e91906143cc565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a99190613600565b611b5f565b005b3480156109bc57600080fd5b506109d760048036038101906109d291906133c2565b611b81565b6040516109e491906140af565b60405180910390f35b3480156109f957600080fd5b50610a146004803603810190610a0f9190613540565b611c15565b005b348015610a2257600080fd5b50610a3d6004803603810190610a389190613600565b611c41565b005b348015610a4b57600080fd5b50610a666004803603810190610a619190613399565b611c63565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610adb5750610ada82611ce7565b5b9050919050565b610aea611dc9565b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b16906146df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b42906146df565b8015610b8f5780601f10610b6457610100808354040283529160200191610b8f565b820191906000526020600020905b815481529060010190602001808311610b7257829003601f168201915b5050505050905090565b6000610ba482611e47565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610bec906146df565b80601f0160208091040260200160405190810160405280929190818152602001828054610c18906146df565b8015610c655780601f10610c3a57610100808354040283529160200191610c65565b820191906000526020600020905b815481529060010190602001808311610c4857829003601f168201915b505050505081565b6000610c7882611248565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce09061430c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d08611e92565b73ffffffffffffffffffffffffffffffffffffffff161480610d375750610d3681610d31611e92565b611b81565b5b610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d9061424c565b60405180910390fd5b610d808383611e9a565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610dc7610dc1611e92565b82611f53565b610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd9061438c565b60405180910390fd5b610e11838383611fe8565b505050565b6000610e2183611388565b8210610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e59906140ec565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015610f85578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610f21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f72576001915050610f8b565b8080610f7d90614711565b915050610ec3565b50600090505b919050565b610f98611dc9565b80601260026101000a81548160ff02191690831515021790555050565b610fbd611dc9565b6000610fc7611466565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fea90614011565b60006040518083038185875af1925050503d8060008114611027576040519150601f19603f3d011682016040523d82523d6000602084013e61102c565b606091505b505090508061103a57600080fd5b50565b611058838383604051806020016040528060008152506118b9565b505050565b6060600061106a83611388565b905060008167ffffffffffffffff8111156110ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156110dc5781602001602082028036833780820191505090505b50905060005b8281101561114c576110f48582610e16565b82828151811061112d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061114490614711565b9150506110e2565b508092505050919050565b61115f611dc9565b80600e8190555050565b6000611173610d8b565b82106111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab9061434c565b60405180910390fd5b600882815481106111ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b61121b611dc9565b80600b90805190602001906112319291906130b2565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e8906142ec565b60405180910390fd5b80915050919050565b600b8054611307906146df565b80601f0160208091040260200160405190810160405280929190818152602001828054611333906146df565b80156113805780601f1061135557610100808354040283529160200191611380565b820191906000526020600020905b81548152906001019060200180831161136357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f0906141ec565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611448611dc9565b611452600061224f565b565b61145c611dc9565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461149f906146df565b80601f01602080910402602001604051908101604052809291908181526020018280546114cb906146df565b80156115185780601f106114ed57610100808354040283529160200191611518565b820191906000526020600020905b8154815290600101906020018083116114fb57829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff1615611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c906142ac565b60405180910390fd5b600061158f610d8b565b9050600082116115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb906143ac565b60405180910390fd5b601054821115611619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116109061422c565b60405180910390fd5b600f5482826116289190614514565b1115611669576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116609061420c565b60405180910390fd5b611671611466565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117ee5760011515601260029054906101000a900460ff161515141561179d576116c833610ebb565b611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe9061436c565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601154838261175a9190614514565b111561179b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117929061418c565b60405180910390fd5b505b81600e546117ab919061459b565b3410156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e49061432c565b60405180910390fd5b5b6000600190505b82811161187957601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061184c90614711565b91905055506118663382846118619190614514565b612315565b808061187190614711565b9150506117f5565b505050565b611890611889611e92565b8383612333565b5050565b61189c611dc9565b6001601260016101000a81548160ff021916908315150217905550565b6118ca6118c4611e92565b83611f53565b611909576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119009061438c565b60405180910390fd5b611915848484846124a0565b50505050565b6013818154811061192b57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c805461196d906146df565b80601f0160208091040260200160405190810160405280929190818152602001828054611999906146df565b80156119e65780601f106119bb576101008083540402835291602001916119e6565b820191906000526020600020905b8154815290600101906020018083116119c957829003601f168201915b505050505081565b60606119f9826124fc565b611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f906142cc565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611ae657600d8054611a61906146df565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8d906146df565b8015611ada5780601f10611aaf57610100808354040283529160200191611ada565b820191906000526020600020905b815481529060010190602001808311611abd57829003601f168201915b50505050509050611b42565b6000611af0612568565b90506000815111611b105760405180602001604052806000815250611b3e565b80611b1a846125fa565b600c604051602001611b2e93929190613fe0565b6040516020818303038152906040525b9150505b919050565b611b4f611dc9565b8060118190555050565b600f5481565b611b67611dc9565b80600c9080519060200190611b7d9291906130b2565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c1d611dc9565b60136000611c2b9190613138565b818160139190611c3c929190613159565b505050565b611c49611dc9565b80600d9080519060200190611c5f9291906130b2565b5050565b611c6b611dc9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd29061412c565b60405180910390fd5b611ce48161224f565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611db257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611dc25750611dc1826127a7565b5b9050919050565b611dd1611e92565b73ffffffffffffffffffffffffffffffffffffffff16611def611466565b73ffffffffffffffffffffffffffffffffffffffff1614611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c9061428c565b60405180910390fd5b565b611e50816124fc565b611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e86906142ec565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f0d83611248565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611f5f83611248565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fa15750611fa08185611b81565b5b80611fdf57508373ffffffffffffffffffffffffffffffffffffffff16611fc784610b99565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661200882611248565b73ffffffffffffffffffffffffffffffffffffffff161461205e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120559061414c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c5906141ac565b60405180910390fd5b6120d9838383612811565b6120e4600082611e9a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213491906145f5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461218b9190614514565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461224a838383612925565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61232f82826040518060200160405280600081525061292a565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612399906141cc565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161249391906140af565b60405180910390a3505050565b6124ab848484611fe8565b6124b784848484612985565b6124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed9061410c565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b8054612577906146df565b80601f01602080910402602001604051908101604052809291908181526020018280546125a3906146df565b80156125f05780601f106125c5576101008083540402835291602001916125f0565b820191906000526020600020905b8154815290600101906020018083116125d357829003601f168201915b5050505050905090565b60606000821415612642576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127a2565b600082905060005b6000821461267457808061265d90614711565b915050600a8261266d919061456a565b915061264a565b60008167ffffffffffffffff8111156126b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126e85781602001600182028036833780820191505090505b5090505b6000851461279b5760018261270191906145f5565b9150600a85612710919061475a565b603061271c9190614514565b60f81b818381518110612758577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612794919061456a565b94506126ec565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61281c838383612b1c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561285f5761285a81612b21565b61289e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461289d5761289c8382612b6a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e1576128dc81612cd7565b612920565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461291f5761291e8282612e1a565b5b5b505050565b505050565b6129348383612e99565b6129416000848484612985565b612980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129779061410c565b60405180910390fd5b505050565b60006129a68473ffffffffffffffffffffffffffffffffffffffff16613073565b15612b0f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129cf611e92565b8786866040518563ffffffff1660e01b81526004016129f19493929190614041565b602060405180830381600087803b158015612a0b57600080fd5b505af1925050508015612a3c57506040513d601f19601f82011682018060405250810190612a3991906135d7565b60015b612abf573d8060008114612a6c576040519150601f19603f3d011682016040523d82523d6000602084013e612a71565b606091505b50600081511415612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae9061410c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b14565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b7784611388565b612b8191906145f5565b9050600060076000848152602001908152602001600020549050818114612c66576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ceb91906145f5565b9050600060096000848152602001908152602001600020549050600060088381548110612d41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612d89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612dfe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e2583611388565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f009061426c565b60405180910390fd5b612f12816124fc565b15612f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f499061416c565b60405180910390fd5b612f5e60008383612811565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fae9190614514565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461306f60008383612925565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c51119050919050565b8280546130be906146df565b90600052602060002090601f0160209004810192826130e05760008555613127565b82601f106130f957805160ff1916838001178555613127565b82800160010185558215613127579182015b8281111561312657825182559160200191906001019061310b565b5b50905061313491906131f9565b5090565b508054600082559060005260206000209081019061315691906131f9565b50565b8280548282559060005260206000209081019282156131e8579160200282015b828111156131e757823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613179565b5b5090506131f591906131f9565b5090565b5b808211156132125760008160009055506001016131fa565b5090565b600061322961322484614418565b6143e7565b90508281526020810184848401111561324157600080fd5b61324c84828561469d565b509392505050565b600061326761326284614448565b6143e7565b90508281526020810184848401111561327f57600080fd5b61328a84828561469d565b509392505050565b6000813590506132a181614858565b92915050565b60008083601f8401126132b957600080fd5b8235905067ffffffffffffffff8111156132d257600080fd5b6020830191508360208202830111156132ea57600080fd5b9250929050565b6000813590506133008161486f565b92915050565b60008135905061331581614886565b92915050565b60008151905061332a81614886565b92915050565b600082601f83011261334157600080fd5b8135613351848260208601613216565b91505092915050565b600082601f83011261336b57600080fd5b813561337b848260208601613254565b91505092915050565b6000813590506133938161489d565b92915050565b6000602082840312156133ab57600080fd5b60006133b984828501613292565b91505092915050565b600080604083850312156133d557600080fd5b60006133e385828601613292565b92505060206133f485828601613292565b9150509250929050565b60008060006060848603121561341357600080fd5b600061342186828701613292565b935050602061343286828701613292565b925050604061344386828701613384565b9150509250925092565b6000806000806080858703121561346357600080fd5b600061347187828801613292565b945050602061348287828801613292565b935050604061349387828801613384565b925050606085013567ffffffffffffffff8111156134b057600080fd5b6134bc87828801613330565b91505092959194509250565b600080604083850312156134db57600080fd5b60006134e985828601613292565b92505060206134fa858286016132f1565b9150509250929050565b6000806040838503121561351757600080fd5b600061352585828601613292565b925050602061353685828601613384565b9150509250929050565b6000806020838503121561355357600080fd5b600083013567ffffffffffffffff81111561356d57600080fd5b613579858286016132a7565b92509250509250929050565b60006020828403121561359757600080fd5b60006135a5848285016132f1565b91505092915050565b6000602082840312156135c057600080fd5b60006135ce84828501613306565b91505092915050565b6000602082840312156135e957600080fd5b60006135f78482850161331b565b91505092915050565b60006020828403121561361257600080fd5b600082013567ffffffffffffffff81111561362c57600080fd5b6136388482850161335a565b91505092915050565b60006020828403121561365357600080fd5b600061366184828501613384565b91505092915050565b60006136768383613fc2565b60208301905092915050565b61368b81614629565b82525050565b600061369c8261449d565b6136a681856144cb565b93506136b183614478565b8060005b838110156136e25781516136c9888261366a565b97506136d4836144be565b9250506001810190506136b5565b5085935050505092915050565b6136f88161463b565b82525050565b6000613709826144a8565b61371381856144dc565b93506137238185602086016146ac565b61372c81614847565b840191505092915050565b6000613742826144b3565b61374c81856144f8565b935061375c8185602086016146ac565b61376581614847565b840191505092915050565b600061377b826144b3565b6137858185614509565b93506137958185602086016146ac565b80840191505092915050565b600081546137ae816146df565b6137b88186614509565b945060018216600081146137d357600181146137e457613817565b60ff19831686528186019350613817565b6137ed85614488565b60005b8381101561380f578154818901526001820191506020810190506137f0565b838801955050505b50505092915050565b600061382d602b836144f8565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006138936032836144f8565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006138f96026836144f8565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061395f6025836144f8565b91507f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008301527f6f776e65720000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139c5601c836144f8565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613a05601c836144f8565b91507f6d6178204e4654207065722061646472657373206578636565646564000000006000830152602082019050919050565b6000613a456024836144f8565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613aab6019836144f8565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613aeb6029836144f8565b91507f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008301527f6c6964206f776e657200000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b516016836144f8565b91507f6d6178204e4654206c696d6974206578636565646564000000000000000000006000830152602082019050919050565b6000613b916024836144f8565b91507f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008301527f65646564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bf7603e836144f8565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008301527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006020830152604082019050919050565b6000613c5d6020836144f8565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613c9d6020836144f8565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613cdd6016836144f8565b91507f74686520636f6e747261637420697320706175736564000000000000000000006000830152602082019050919050565b6000613d1d602f836144f8565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613d836018836144f8565b91507f4552433732313a20696e76616c696420746f6b656e20494400000000000000006000830152602082019050919050565b6000613dc36021836144f8565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e296000836144ed565b9150600082019050919050565b6000613e436012836144f8565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000613e83602c836144f8565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613ee96017836144f8565b91507f75736572206973206e6f742077686974656c69737465640000000000000000006000830152602082019050919050565b6000613f29602e836144f8565b91507f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008301527f72206e6f7220617070726f7665640000000000000000000000000000000000006020830152604082019050919050565b6000613f8f601b836144f8565b91507f6e65656420746f206d696e74206174206c656173742031204e465400000000006000830152602082019050919050565b613fcb81614693565b82525050565b613fda81614693565b82525050565b6000613fec8286613770565b9150613ff88285613770565b915061400482846137a1565b9150819050949350505050565b600061401c82613e1c565b9150819050919050565b600060208201905061403b6000830184613682565b92915050565b60006080820190506140566000830187613682565b6140636020830186613682565b6140706040830185613fd1565b818103606083015261408281846136fe565b905095945050505050565b600060208201905081810360008301526140a78184613691565b905092915050565b60006020820190506140c460008301846136ef565b92915050565b600060208201905081810360008301526140e48184613737565b905092915050565b6000602082019050818103600083015261410581613820565b9050919050565b6000602082019050818103600083015261412581613886565b9050919050565b60006020820190508181036000830152614145816138ec565b9050919050565b6000602082019050818103600083015261416581613952565b9050919050565b60006020820190508181036000830152614185816139b8565b9050919050565b600060208201905081810360008301526141a5816139f8565b9050919050565b600060208201905081810360008301526141c581613a38565b9050919050565b600060208201905081810360008301526141e581613a9e565b9050919050565b6000602082019050818103600083015261420581613ade565b9050919050565b6000602082019050818103600083015261422581613b44565b9050919050565b6000602082019050818103600083015261424581613b84565b9050919050565b6000602082019050818103600083015261426581613bea565b9050919050565b6000602082019050818103600083015261428581613c50565b9050919050565b600060208201905081810360008301526142a581613c90565b9050919050565b600060208201905081810360008301526142c581613cd0565b9050919050565b600060208201905081810360008301526142e581613d10565b9050919050565b6000602082019050818103600083015261430581613d76565b9050919050565b6000602082019050818103600083015261432581613db6565b9050919050565b6000602082019050818103600083015261434581613e36565b9050919050565b6000602082019050818103600083015261436581613e76565b9050919050565b6000602082019050818103600083015261438581613edc565b9050919050565b600060208201905081810360008301526143a581613f1c565b9050919050565b600060208201905081810360008301526143c581613f82565b9050919050565b60006020820190506143e16000830184613fd1565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561440e5761440d614818565b5b8060405250919050565b600067ffffffffffffffff82111561443357614432614818565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561446357614462614818565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061451f82614693565b915061452a83614693565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561455f5761455e61478b565b5b828201905092915050565b600061457582614693565b915061458083614693565b9250826145905761458f6147ba565b5b828204905092915050565b60006145a682614693565b91506145b183614693565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145ea576145e961478b565b5b828202905092915050565b600061460082614693565b915061460b83614693565b92508282101561461e5761461d61478b565b5b828203905092915050565b600061463482614673565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146ca5780820151818401526020810190506146af565b838111156146d9576000848401525b50505050565b600060028204905060018216806146f757607f821691505b6020821081141561470b5761470a6147e9565b5b50919050565b600061471c82614693565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561474f5761474e61478b565b5b600182019050919050565b600061476582614693565b915061477083614693565b9250826147805761477f6147ba565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61486181614629565b811461486c57600080fd5b50565b6148788161463b565b811461488357600080fd5b50565b61488f81614647565b811461489a57600080fd5b50565b6148a681614693565b81146148b157600080fd5b5056fea2646970667358221220b897fe0954a4328cda2a4ac40162ac01150ce0e200cf9d8664016a1c6eeca22a64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000f54696b6b61205469676572204e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003544b5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55587a736855476a4d786764503279526f7570326a4d7a69556476767648656562584837414555745a4d39332f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55587a736855476a4d786764503279526f7570326a4d7a69556476767648656562584837414555745a4d39332f00000000000000000000

Deployed Bytecode

0x6080604052600436106102725760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb011461095c578063da3ef23f14610987578063e985e9c5146109b0578063edec5f27146109ed578063f2c4ce1e14610a16578063f2fde38b14610a3f57610272565b8063b88d4fde1461083a578063ba4e5c4914610863578063ba7d2c76146108a0578063c6682862146108cb578063c87b56dd146108f6578063d0eb26b01461093357610272565b80638da5cb5b116101135780638da5cb5b1461075d57806395d89b41146107885780639c70b512146107b3578063a0712d68146107de578063a22cb465146107fa578063a475b5dd1461082357610272565b80636352211e146106785780636c0360eb146106b557806370a08231146106e0578063715018a61461071d5780637f00c7a61461073457610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906135ae565b610a68565b6040516102ab91906140af565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613585565b610ae2565b005b3480156102e957600080fd5b506102f2610b07565b6040516102ff91906140ca565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613641565b610b99565b60405161033c9190614026565b60405180910390f35b34801561035157600080fd5b5061035a610bdf565b60405161036791906140ca565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613504565b610c6d565b005b3480156103a557600080fd5b506103ae610d85565b6040516103bb91906143cc565b60405180910390f35b3480156103d057600080fd5b506103d9610d8b565b6040516103e691906143cc565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613399565b610d98565b60405161042391906143cc565b60405180910390f35b34801561043857600080fd5b50610441610db0565b60405161044e91906143cc565b60405180910390f35b34801561046357600080fd5b5061047e600480360381019061047991906133fe565b610db6565b005b34801561048c57600080fd5b506104a760048036038101906104a29190613504565b610e16565b6040516104b491906143cc565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613399565b610ebb565b6040516104f191906140af565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190613585565b610f90565b005b61052b610fb5565b005b34801561053957600080fd5b50610554600480360381019061054f91906133fe565b61103d565b005b34801561056257600080fd5b5061057d60048036038101906105789190613399565b61105d565b60405161058a919061408d565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190613641565b611157565b005b3480156105c857600080fd5b506105e360048036038101906105de9190613641565b611169565b6040516105f091906143cc565b60405180910390f35b34801561060557600080fd5b5061060e611200565b60405161061b91906140af565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613600565b611213565b005b34801561065957600080fd5b50610662611235565b60405161066f91906140af565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190613641565b611248565b6040516106ac9190614026565b60405180910390f35b3480156106c157600080fd5b506106ca6112fa565b6040516106d791906140ca565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613399565b611388565b60405161071491906143cc565b60405180910390f35b34801561072957600080fd5b50610732611440565b005b34801561074057600080fd5b5061075b60048036038101906107569190613641565b611454565b005b34801561076957600080fd5b50610772611466565b60405161077f9190614026565b60405180910390f35b34801561079457600080fd5b5061079d611490565b6040516107aa91906140ca565b60405180910390f35b3480156107bf57600080fd5b506107c8611522565b6040516107d591906140af565b60405180910390f35b6107f860048036038101906107f39190613641565b611535565b005b34801561080657600080fd5b50610821600480360381019061081c91906134c8565b61187e565b005b34801561082f57600080fd5b50610838611894565b005b34801561084657600080fd5b50610861600480360381019061085c919061344d565b6118b9565b005b34801561086f57600080fd5b5061088a60048036038101906108859190613641565b61191b565b6040516108979190614026565b60405180910390f35b3480156108ac57600080fd5b506108b561195a565b6040516108c291906143cc565b60405180910390f35b3480156108d757600080fd5b506108e0611960565b6040516108ed91906140ca565b60405180910390f35b34801561090257600080fd5b5061091d60048036038101906109189190613641565b6119ee565b60405161092a91906140ca565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613641565b611b47565b005b34801561096857600080fd5b50610971611b59565b60405161097e91906143cc565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a99190613600565b611b5f565b005b3480156109bc57600080fd5b506109d760048036038101906109d291906133c2565b611b81565b6040516109e491906140af565b60405180910390f35b3480156109f957600080fd5b50610a146004803603810190610a0f9190613540565b611c15565b005b348015610a2257600080fd5b50610a3d6004803603810190610a389190613600565b611c41565b005b348015610a4b57600080fd5b50610a666004803603810190610a619190613399565b611c63565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610adb5750610ada82611ce7565b5b9050919050565b610aea611dc9565b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b16906146df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b42906146df565b8015610b8f5780601f10610b6457610100808354040283529160200191610b8f565b820191906000526020600020905b815481529060010190602001808311610b7257829003601f168201915b5050505050905090565b6000610ba482611e47565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610bec906146df565b80601f0160208091040260200160405190810160405280929190818152602001828054610c18906146df565b8015610c655780601f10610c3a57610100808354040283529160200191610c65565b820191906000526020600020905b815481529060010190602001808311610c4857829003601f168201915b505050505081565b6000610c7882611248565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce09061430c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d08611e92565b73ffffffffffffffffffffffffffffffffffffffff161480610d375750610d3681610d31611e92565b611b81565b5b610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d9061424c565b60405180910390fd5b610d808383611e9a565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610dc7610dc1611e92565b82611f53565b610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd9061438c565b60405180910390fd5b610e11838383611fe8565b505050565b6000610e2183611388565b8210610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e59906140ec565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015610f85578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610f21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f72576001915050610f8b565b8080610f7d90614711565b915050610ec3565b50600090505b919050565b610f98611dc9565b80601260026101000a81548160ff02191690831515021790555050565b610fbd611dc9565b6000610fc7611466565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fea90614011565b60006040518083038185875af1925050503d8060008114611027576040519150601f19603f3d011682016040523d82523d6000602084013e61102c565b606091505b505090508061103a57600080fd5b50565b611058838383604051806020016040528060008152506118b9565b505050565b6060600061106a83611388565b905060008167ffffffffffffffff8111156110ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156110dc5781602001602082028036833780820191505090505b50905060005b8281101561114c576110f48582610e16565b82828151811061112d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061114490614711565b9150506110e2565b508092505050919050565b61115f611dc9565b80600e8190555050565b6000611173610d8b565b82106111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab9061434c565b60405180910390fd5b600882815481106111ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b61121b611dc9565b80600b90805190602001906112319291906130b2565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e8906142ec565b60405180910390fd5b80915050919050565b600b8054611307906146df565b80601f0160208091040260200160405190810160405280929190818152602001828054611333906146df565b80156113805780601f1061135557610100808354040283529160200191611380565b820191906000526020600020905b81548152906001019060200180831161136357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f0906141ec565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611448611dc9565b611452600061224f565b565b61145c611dc9565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461149f906146df565b80601f01602080910402602001604051908101604052809291908181526020018280546114cb906146df565b80156115185780601f106114ed57610100808354040283529160200191611518565b820191906000526020600020905b8154815290600101906020018083116114fb57829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff1615611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c906142ac565b60405180910390fd5b600061158f610d8b565b9050600082116115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb906143ac565b60405180910390fd5b601054821115611619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116109061422c565b60405180910390fd5b600f5482826116289190614514565b1115611669576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116609061420c565b60405180910390fd5b611671611466565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117ee5760011515601260029054906101000a900460ff161515141561179d576116c833610ebb565b611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe9061436c565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601154838261175a9190614514565b111561179b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117929061418c565b60405180910390fd5b505b81600e546117ab919061459b565b3410156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e49061432c565b60405180910390fd5b5b6000600190505b82811161187957601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061184c90614711565b91905055506118663382846118619190614514565b612315565b808061187190614711565b9150506117f5565b505050565b611890611889611e92565b8383612333565b5050565b61189c611dc9565b6001601260016101000a81548160ff021916908315150217905550565b6118ca6118c4611e92565b83611f53565b611909576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119009061438c565b60405180910390fd5b611915848484846124a0565b50505050565b6013818154811061192b57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c805461196d906146df565b80601f0160208091040260200160405190810160405280929190818152602001828054611999906146df565b80156119e65780601f106119bb576101008083540402835291602001916119e6565b820191906000526020600020905b8154815290600101906020018083116119c957829003601f168201915b505050505081565b60606119f9826124fc565b611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f906142cc565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611ae657600d8054611a61906146df565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8d906146df565b8015611ada5780601f10611aaf57610100808354040283529160200191611ada565b820191906000526020600020905b815481529060010190602001808311611abd57829003601f168201915b50505050509050611b42565b6000611af0612568565b90506000815111611b105760405180602001604052806000815250611b3e565b80611b1a846125fa565b600c604051602001611b2e93929190613fe0565b6040516020818303038152906040525b9150505b919050565b611b4f611dc9565b8060118190555050565b600f5481565b611b67611dc9565b80600c9080519060200190611b7d9291906130b2565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c1d611dc9565b60136000611c2b9190613138565b818160139190611c3c929190613159565b505050565b611c49611dc9565b80600d9080519060200190611c5f9291906130b2565b5050565b611c6b611dc9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd29061412c565b60405180910390fd5b611ce48161224f565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611db257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611dc25750611dc1826127a7565b5b9050919050565b611dd1611e92565b73ffffffffffffffffffffffffffffffffffffffff16611def611466565b73ffffffffffffffffffffffffffffffffffffffff1614611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c9061428c565b60405180910390fd5b565b611e50816124fc565b611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e86906142ec565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f0d83611248565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611f5f83611248565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fa15750611fa08185611b81565b5b80611fdf57508373ffffffffffffffffffffffffffffffffffffffff16611fc784610b99565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661200882611248565b73ffffffffffffffffffffffffffffffffffffffff161461205e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120559061414c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c5906141ac565b60405180910390fd5b6120d9838383612811565b6120e4600082611e9a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213491906145f5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461218b9190614514565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461224a838383612925565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61232f82826040518060200160405280600081525061292a565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612399906141cc565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161249391906140af565b60405180910390a3505050565b6124ab848484611fe8565b6124b784848484612985565b6124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed9061410c565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b8054612577906146df565b80601f01602080910402602001604051908101604052809291908181526020018280546125a3906146df565b80156125f05780601f106125c5576101008083540402835291602001916125f0565b820191906000526020600020905b8154815290600101906020018083116125d357829003601f168201915b5050505050905090565b60606000821415612642576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127a2565b600082905060005b6000821461267457808061265d90614711565b915050600a8261266d919061456a565b915061264a565b60008167ffffffffffffffff8111156126b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126e85781602001600182028036833780820191505090505b5090505b6000851461279b5760018261270191906145f5565b9150600a85612710919061475a565b603061271c9190614514565b60f81b818381518110612758577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612794919061456a565b94506126ec565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61281c838383612b1c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561285f5761285a81612b21565b61289e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461289d5761289c8382612b6a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e1576128dc81612cd7565b612920565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461291f5761291e8282612e1a565b5b5b505050565b505050565b6129348383612e99565b6129416000848484612985565b612980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129779061410c565b60405180910390fd5b505050565b60006129a68473ffffffffffffffffffffffffffffffffffffffff16613073565b15612b0f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129cf611e92565b8786866040518563ffffffff1660e01b81526004016129f19493929190614041565b602060405180830381600087803b158015612a0b57600080fd5b505af1925050508015612a3c57506040513d601f19601f82011682018060405250810190612a3991906135d7565b60015b612abf573d8060008114612a6c576040519150601f19603f3d011682016040523d82523d6000602084013e612a71565b606091505b50600081511415612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae9061410c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b14565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b7784611388565b612b8191906145f5565b9050600060076000848152602001908152602001600020549050818114612c66576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ceb91906145f5565b9050600060096000848152602001908152602001600020549050600060088381548110612d41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612d89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612dfe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e2583611388565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f009061426c565b60405180910390fd5b612f12816124fc565b15612f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f499061416c565b60405180910390fd5b612f5e60008383612811565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fae9190614514565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461306f60008383612925565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c51119050919050565b8280546130be906146df565b90600052602060002090601f0160209004810192826130e05760008555613127565b82601f106130f957805160ff1916838001178555613127565b82800160010185558215613127579182015b8281111561312657825182559160200191906001019061310b565b5b50905061313491906131f9565b5090565b508054600082559060005260206000209081019061315691906131f9565b50565b8280548282559060005260206000209081019282156131e8579160200282015b828111156131e757823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613179565b5b5090506131f591906131f9565b5090565b5b808211156132125760008160009055506001016131fa565b5090565b600061322961322484614418565b6143e7565b90508281526020810184848401111561324157600080fd5b61324c84828561469d565b509392505050565b600061326761326284614448565b6143e7565b90508281526020810184848401111561327f57600080fd5b61328a84828561469d565b509392505050565b6000813590506132a181614858565b92915050565b60008083601f8401126132b957600080fd5b8235905067ffffffffffffffff8111156132d257600080fd5b6020830191508360208202830111156132ea57600080fd5b9250929050565b6000813590506133008161486f565b92915050565b60008135905061331581614886565b92915050565b60008151905061332a81614886565b92915050565b600082601f83011261334157600080fd5b8135613351848260208601613216565b91505092915050565b600082601f83011261336b57600080fd5b813561337b848260208601613254565b91505092915050565b6000813590506133938161489d565b92915050565b6000602082840312156133ab57600080fd5b60006133b984828501613292565b91505092915050565b600080604083850312156133d557600080fd5b60006133e385828601613292565b92505060206133f485828601613292565b9150509250929050565b60008060006060848603121561341357600080fd5b600061342186828701613292565b935050602061343286828701613292565b925050604061344386828701613384565b9150509250925092565b6000806000806080858703121561346357600080fd5b600061347187828801613292565b945050602061348287828801613292565b935050604061349387828801613384565b925050606085013567ffffffffffffffff8111156134b057600080fd5b6134bc87828801613330565b91505092959194509250565b600080604083850312156134db57600080fd5b60006134e985828601613292565b92505060206134fa858286016132f1565b9150509250929050565b6000806040838503121561351757600080fd5b600061352585828601613292565b925050602061353685828601613384565b9150509250929050565b6000806020838503121561355357600080fd5b600083013567ffffffffffffffff81111561356d57600080fd5b613579858286016132a7565b92509250509250929050565b60006020828403121561359757600080fd5b60006135a5848285016132f1565b91505092915050565b6000602082840312156135c057600080fd5b60006135ce84828501613306565b91505092915050565b6000602082840312156135e957600080fd5b60006135f78482850161331b565b91505092915050565b60006020828403121561361257600080fd5b600082013567ffffffffffffffff81111561362c57600080fd5b6136388482850161335a565b91505092915050565b60006020828403121561365357600080fd5b600061366184828501613384565b91505092915050565b60006136768383613fc2565b60208301905092915050565b61368b81614629565b82525050565b600061369c8261449d565b6136a681856144cb565b93506136b183614478565b8060005b838110156136e25781516136c9888261366a565b97506136d4836144be565b9250506001810190506136b5565b5085935050505092915050565b6136f88161463b565b82525050565b6000613709826144a8565b61371381856144dc565b93506137238185602086016146ac565b61372c81614847565b840191505092915050565b6000613742826144b3565b61374c81856144f8565b935061375c8185602086016146ac565b61376581614847565b840191505092915050565b600061377b826144b3565b6137858185614509565b93506137958185602086016146ac565b80840191505092915050565b600081546137ae816146df565b6137b88186614509565b945060018216600081146137d357600181146137e457613817565b60ff19831686528186019350613817565b6137ed85614488565b60005b8381101561380f578154818901526001820191506020810190506137f0565b838801955050505b50505092915050565b600061382d602b836144f8565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006138936032836144f8565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006138f96026836144f8565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061395f6025836144f8565b91507f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008301527f6f776e65720000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139c5601c836144f8565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613a05601c836144f8565b91507f6d6178204e4654207065722061646472657373206578636565646564000000006000830152602082019050919050565b6000613a456024836144f8565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613aab6019836144f8565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613aeb6029836144f8565b91507f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008301527f6c6964206f776e657200000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b516016836144f8565b91507f6d6178204e4654206c696d6974206578636565646564000000000000000000006000830152602082019050919050565b6000613b916024836144f8565b91507f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008301527f65646564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bf7603e836144f8565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008301527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006020830152604082019050919050565b6000613c5d6020836144f8565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613c9d6020836144f8565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613cdd6016836144f8565b91507f74686520636f6e747261637420697320706175736564000000000000000000006000830152602082019050919050565b6000613d1d602f836144f8565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613d836018836144f8565b91507f4552433732313a20696e76616c696420746f6b656e20494400000000000000006000830152602082019050919050565b6000613dc36021836144f8565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e296000836144ed565b9150600082019050919050565b6000613e436012836144f8565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000613e83602c836144f8565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613ee96017836144f8565b91507f75736572206973206e6f742077686974656c69737465640000000000000000006000830152602082019050919050565b6000613f29602e836144f8565b91507f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008301527f72206e6f7220617070726f7665640000000000000000000000000000000000006020830152604082019050919050565b6000613f8f601b836144f8565b91507f6e65656420746f206d696e74206174206c656173742031204e465400000000006000830152602082019050919050565b613fcb81614693565b82525050565b613fda81614693565b82525050565b6000613fec8286613770565b9150613ff88285613770565b915061400482846137a1565b9150819050949350505050565b600061401c82613e1c565b9150819050919050565b600060208201905061403b6000830184613682565b92915050565b60006080820190506140566000830187613682565b6140636020830186613682565b6140706040830185613fd1565b818103606083015261408281846136fe565b905095945050505050565b600060208201905081810360008301526140a78184613691565b905092915050565b60006020820190506140c460008301846136ef565b92915050565b600060208201905081810360008301526140e48184613737565b905092915050565b6000602082019050818103600083015261410581613820565b9050919050565b6000602082019050818103600083015261412581613886565b9050919050565b60006020820190508181036000830152614145816138ec565b9050919050565b6000602082019050818103600083015261416581613952565b9050919050565b60006020820190508181036000830152614185816139b8565b9050919050565b600060208201905081810360008301526141a5816139f8565b9050919050565b600060208201905081810360008301526141c581613a38565b9050919050565b600060208201905081810360008301526141e581613a9e565b9050919050565b6000602082019050818103600083015261420581613ade565b9050919050565b6000602082019050818103600083015261422581613b44565b9050919050565b6000602082019050818103600083015261424581613b84565b9050919050565b6000602082019050818103600083015261426581613bea565b9050919050565b6000602082019050818103600083015261428581613c50565b9050919050565b600060208201905081810360008301526142a581613c90565b9050919050565b600060208201905081810360008301526142c581613cd0565b9050919050565b600060208201905081810360008301526142e581613d10565b9050919050565b6000602082019050818103600083015261430581613d76565b9050919050565b6000602082019050818103600083015261432581613db6565b9050919050565b6000602082019050818103600083015261434581613e36565b9050919050565b6000602082019050818103600083015261436581613e76565b9050919050565b6000602082019050818103600083015261438581613edc565b9050919050565b600060208201905081810360008301526143a581613f1c565b9050919050565b600060208201905081810360008301526143c581613f82565b9050919050565b60006020820190506143e16000830184613fd1565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561440e5761440d614818565b5b8060405250919050565b600067ffffffffffffffff82111561443357614432614818565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561446357614462614818565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061451f82614693565b915061452a83614693565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561455f5761455e61478b565b5b828201905092915050565b600061457582614693565b915061458083614693565b9250826145905761458f6147ba565b5b828204905092915050565b60006145a682614693565b91506145b183614693565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145ea576145e961478b565b5b828202905092915050565b600061460082614693565b915061460b83614693565b92508282101561461e5761461d61478b565b5b828203905092915050565b600061463482614673565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146ca5780820151818401526020810190506146af565b838111156146d9576000848401525b50505050565b600060028204905060018216806146f757607f821691505b6020821081141561470b5761470a6147e9565b5b50919050565b600061471c82614693565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561474f5761474e61478b565b5b600182019050919050565b600061476582614693565b915061477083614693565b9250826147805761477f6147ba565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61486181614629565b811461486c57600080fd5b50565b6148788161463b565b811461488357600080fd5b50565b61488f81614647565b811461489a57600080fd5b50565b6148a681614693565b81146148b157600080fd5b5056fea2646970667358221220b897fe0954a4328cda2a4ac40162ac01150ce0e200cf9d8664016a1c6eeca22a64736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000f54696b6b61205469676572204e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003544b5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55587a736855476a4d786764503279526f7570326a4d7a69556476767648656562584837414555745a4d39332f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55587a736855476a4d786764503279526f7570326a4d7a69556476767648656562584837414555745a4d39332f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Tikka Tiger NFT
Arg [1] : _symbol (string): TKT
Arg [2] : _initBaseURI (string): ipfs://QmUXzshUGjMxgdP2yRoup2jMziUdvvvHeebXH7AEUtZM93/
Arg [3] : _initNotRevealedUri (string): ipfs://QmUXzshUGjMxgdP2yRoup2jMziUdvvvHeebXH7AEUtZM93/

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 54696b6b61205469676572204e46540000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 544b540000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d55587a736855476a4d786764503279526f7570326a4d7a
Arg [10] : 69556476767648656562584837414555745a4d39332f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [12] : 697066733a2f2f516d55587a736855476a4d786764503279526f7570326a4d7a
Arg [13] : 69556476767648656562584837414555745a4d39332f00000000000000000000


Deployed Bytecode Sourcemap

46310:4228:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40087:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50055:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26821:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28334:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46463:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27851:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46496:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40727:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46792:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46567:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29034:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40395:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48184:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50136:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50390:145;;;:::i;:::-;;29441:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48429:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49487:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40917:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46679:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49695:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46648:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26532:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46395:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26263:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5350:103;;;;;;;;;;;;;:::i;:::-;;49573:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4702:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26990:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46711:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47245:931;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28577:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49302:65;;;;;;;;;;;;;:::i;:::-;;29697:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46750:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46606;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46421;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48783:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49375:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46530:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49799:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28803:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50239:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49929:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5608:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40087:224;40189:4;40228:35;40213:50;;;:11;:50;;;;:90;;;;40267:36;40291:11;40267:23;:36::i;:::-;40213:90;40206:97;;40087:224;;;:::o;50055:73::-;4588:13;:11;:13::i;:::-;50116:6:::1;50107;;:15;;;;;;;;;;;;;;;;;;50055:73:::0;:::o;26821:100::-;26875:13;26908:5;26901:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26821:100;:::o;28334:171::-;28410:7;28430:23;28445:7;28430:14;:23::i;:::-;28473:15;:24;28489:7;28473:24;;;;;;;;;;;;;;;;;;;;;28466:31;;28334:171;;;:::o;46463:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27851:417::-;27932:13;27948:23;27963:7;27948:14;:23::i;:::-;27932:39;;27996:5;27990:11;;:2;:11;;;;27982:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28090:5;28074:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28099:37;28116:5;28123:12;:10;:12::i;:::-;28099:16;:37::i;:::-;28074:62;28052:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28239:21;28248:2;28252:7;28239:8;:21::i;:::-;27851:417;;;:::o;46496:29::-;;;;:::o;40727:113::-;40788:7;40815:10;:17;;;;40808:24;;40727:113;:::o;46792:55::-;;;;;;;;;;;;;;;;;:::o;46567:34::-;;;;:::o;29034:336::-;29229:41;29248:12;:10;:12::i;:::-;29262:7;29229:18;:41::i;:::-;29221:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29334:28;29344:4;29350:2;29354:7;29334:9;:28::i;:::-;29034:336;;;:::o;40395:256::-;40492:7;40528:23;40545:5;40528:16;:23::i;:::-;40520:5;:31;40512:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40617:12;:19;40630:5;40617:19;;;;;;;;;;;;;;;:26;40637:5;40617:26;;;;;;;;;;;;40610:33;;40395:256;;;;:::o;48184:239::-;48243:4;48261:6;48270:1;48261:10;;48256:143;48277:20;:27;;;;48273:1;:31;48256:143;;;48351:5;48324:32;;:20;48345:1;48324:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;48320:72;;;48378:4;48371:11;;;;;48320:72;48306:3;;;;;:::i;:::-;;;;48256:143;;;;48412:5;48405:12;;48184:239;;;;:::o;50136:95::-;4588:13;:11;:13::i;:::-;50219:6:::1;50201:15;;:24;;;;;;;;;;;;;;;;;;50136:95:::0;:::o;50390:145::-;4588:13;:11;:13::i;:::-;50443:7:::1;50464;:5;:7::i;:::-;50456:21;;50485;50456:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50442:69;;;50526:2;50518:11;;;::::0;::::1;;4612:1;50390:145::o:0;29441:185::-;29579:39;29596:4;29602:2;29606:7;29579:39;;;;;;;;;;;;:16;:39::i;:::-;29441:185;;;:::o;48429:348::-;48504:16;48532:23;48558:17;48568:6;48558:9;:17::i;:::-;48532:43;;48582:25;48624:15;48610:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48582:58;;48652:9;48647:103;48667:15;48663:1;:19;48647:103;;;48712:30;48732:6;48740:1;48712:19;:30::i;:::-;48698:8;48707:1;48698:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;48684:3;;;;;:::i;:::-;;;;48647:103;;;;48763:8;48756:15;;;;48429:348;;;:::o;49487:80::-;4588:13;:11;:13::i;:::-;49553:8:::1;49546:4;:15;;;;49487:80:::0;:::o;40917:233::-;40992:7;41028:30;:28;:30::i;:::-;41020:5;:38;41012:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41125:10;41136:5;41125:17;;;;;;;;;;;;;;;;;;;;;;;;41118:24;;40917:233;;;:::o;46679:27::-;;;;;;;;;;;;;:::o;49695:98::-;4588:13;:11;:13::i;:::-;49776:11:::1;49766:7;:21;;;;;;;;;;;;:::i;:::-;;49695:98:::0;:::o;46648:26::-;;;;;;;;;;;;;:::o;26532:222::-;26604:7;26624:13;26640:7;:16;26648:7;26640:16;;;;;;;;;;;;;;;;;;;;;26624:32;;26692:1;26675:19;;:5;:19;;;;26667:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26741:5;26734:12;;;26532:222;;;:::o;46395:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26263:207::-;26335:7;26380:1;26363:19;;:5;:19;;;;26355:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26446:9;:16;26456:5;26446:16;;;;;;;;;;;;;;;;26439:23;;26263:207;;;:::o;5350:103::-;4588:13;:11;:13::i;:::-;5415:30:::1;5442:1;5415:18;:30::i;:::-;5350:103::o:0;49573:116::-;4588:13;:11;:13::i;:::-;49666:17:::1;49650:13;:33;;;;49573:116:::0;:::o;4702:87::-;4748:7;4775:6;;;;;;;;;;;4768:13;;4702:87;:::o;26990:104::-;27046:13;27079:7;27072:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26990:104;:::o;46711:34::-;;;;;;;;;;;;;:::o;47245:931::-;47311:6;;;;;;;;;;;47310:7;47302:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;47351:14;47368:13;:11;:13::i;:::-;47351:30;;47410:1;47396:11;:15;47388:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;47473:13;;47458:11;:28;;47450:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;47566:9;;47551:11;47542:6;:20;;;;:::i;:::-;:33;;47534:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47629:7;:5;:7::i;:::-;47615:21;;:10;:21;;;47611:416;;47671:4;47652:23;;:15;;;;;;;;;;;:23;;;47649:298;;;47700:25;47714:10;47700:13;:25::i;:::-;47692:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;47768:24;47795:20;:32;47816:10;47795:32;;;;;;;;;;;;;;;;47768:59;;47884:18;;47869:11;47850:16;:30;;;;:::i;:::-;:52;;47842:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;47649:298;;47985:11;47978:4;;:18;;;;:::i;:::-;47965:9;:31;;47957:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47611:416;48040:9;48052:1;48040:13;;48035:136;48060:11;48055:1;:16;48035:136;;48087:20;:32;48108:10;48087:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;48130:33;48140:10;48161:1;48152:6;:10;;;;:::i;:::-;48130:9;:33::i;:::-;48073:3;;;;;:::i;:::-;;;;48035:136;;;;47245:931;;:::o;28577:155::-;28672:52;28691:12;:10;:12::i;:::-;28705:8;28715;28672:18;:52::i;:::-;28577:155;;:::o;49302:65::-;4588:13;:11;:13::i;:::-;49357:4:::1;49346:8;;:15;;;;;;;;;;;;;;;;;;49302:65::o:0;29697:323::-;29871:41;29890:12;:10;:12::i;:::-;29904:7;29871:18;:41::i;:::-;29863:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29974:38;29988:4;29994:2;29998:7;30007:4;29974:13;:38::i;:::-;29697:323;;;;:::o;46750:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46606:::-;;;;:::o;46421:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48783:497::-;48881:13;48922:16;48930:7;48922;:16::i;:::-;48906:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;49031:5;49019:17;;:8;;;;;;;;;;;:17;;;49016:62;;;49056:14;49049:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49016:62;49086:28;49117:10;:8;:10::i;:::-;49086:41;;49172:1;49147:14;49141:28;:32;:133;;;;;;;;;;;;;;;;;49209:14;49225:18;:7;:16;:18::i;:::-;49245:13;49192:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49141:133;49134:140;;;48783:497;;;;:::o;49375:104::-;4588:13;:11;:13::i;:::-;49467:6:::1;49446:18;:27;;;;49375:104:::0;:::o;46530:32::-;;;;:::o;49799:122::-;4588:13;:11;:13::i;:::-;49898:17:::1;49882:13;:33;;;;;;;;;;;;:::i;:::-;;49799:122:::0;:::o;28803:164::-;28900:4;28924:18;:25;28943:5;28924:25;;;;;;;;;;;;;;;:35;28950:8;28924:35;;;;;;;;;;;;;;;;;;;;;;;;;28917:42;;28803:164;;;;:::o;50239:144::-;4588:13;:11;:13::i;:::-;50321:20:::1;;50314:27;;;;:::i;:::-;50371:6;;50348:20;:29;;;;;;;:::i;:::-;;50239:144:::0;;:::o;49929:120::-;4588:13;:11;:13::i;:::-;50028:15:::1;50011:14;:32;;;;;;;;;;;;:::i;:::-;;49929:120:::0;:::o;5608:201::-;4588:13;:11;:13::i;:::-;5717:1:::1;5697:22;;:8;:22;;;;5689:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5773:28;5792:8;5773:18;:28::i;:::-;5608:201:::0;:::o;25894:305::-;25996:4;26048:25;26033:40;;;:11;:40;;;;:105;;;;26105:33;26090:48;;;:11;:48;;;;26033:105;:158;;;;26155:36;26179:11;26155:23;:36::i;:::-;26033:158;26013:178;;25894:305;;;:::o;4867:132::-;4942:12;:10;:12::i;:::-;4931:23;;:7;:5;:7::i;:::-;:23;;;4923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4867:132::o;36309:135::-;36391:16;36399:7;36391;:16::i;:::-;36383:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36309:135;:::o;3253:98::-;3306:7;3333:10;3326:17;;3253:98;:::o;35588:174::-;35690:2;35663:15;:24;35679:7;35663:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35746:7;35742:2;35708:46;;35717:23;35732:7;35717:14;:23::i;:::-;35708:46;;;;;;;;;;;;35588:174;;:::o;31821:264::-;31914:4;31931:13;31947:23;31962:7;31947:14;:23::i;:::-;31931:39;;32000:5;31989:16;;:7;:16;;;:52;;;;32009:32;32026:5;32033:7;32009:16;:32::i;:::-;31989:52;:87;;;;32069:7;32045:31;;:20;32057:7;32045:11;:20::i;:::-;:31;;;31989:87;31981:96;;;31821:264;;;;:::o;34844:625::-;35003:4;34976:31;;:23;34991:7;34976:14;:23::i;:::-;:31;;;34968:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35082:1;35068:16;;:2;:16;;;;35060:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35138:39;35159:4;35165:2;35169:7;35138:20;:39::i;:::-;35242:29;35259:1;35263:7;35242:8;:29::i;:::-;35303:1;35284:9;:15;35294:4;35284:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35332:1;35315:9;:13;35325:2;35315:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35363:2;35344:7;:16;35352:7;35344:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35402:7;35398:2;35383:27;;35392:4;35383:27;;;;;;;;;;;;35423:38;35443:4;35449:2;35453:7;35423:19;:38::i;:::-;34844:625;;;:::o;5969:191::-;6043:16;6062:6;;;;;;;;;;;6043:25;;6088:8;6079:6;;:17;;;;;;;;;;;;;;;;;;6143:8;6112:40;;6133:8;6112:40;;;;;;;;;;;;5969:191;;:::o;32427:110::-;32503:26;32513:2;32517:7;32503:26;;;;;;;;;;;;:9;:26::i;:::-;32427:110;;:::o;35905:315::-;36060:8;36051:17;;:5;:17;;;;36043:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36147:8;36109:18;:25;36128:5;36109:25;;;;;;;;;;;;;;;:35;36135:8;36109:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36193:8;36171:41;;36186:5;36171:41;;;36203:8;36171:41;;;;;;:::i;:::-;;;;;;;;35905:315;;;:::o;30901:313::-;31057:28;31067:4;31073:2;31077:7;31057:9;:28::i;:::-;31104:47;31127:4;31133:2;31137:7;31146:4;31104:22;:47::i;:::-;31096:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30901:313;;;;:::o;31527:127::-;31592:4;31644:1;31616:30;;:7;:16;31624:7;31616:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31609:37;;31527:127;;;:::o;47124:102::-;47184:13;47213:7;47206:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47124:102;:::o;507:723::-;563:13;793:1;784:5;:10;780:53;;;811:10;;;;;;;;;;;;;;;;;;;;;780:53;843:12;858:5;843:20;;874:14;899:78;914:1;906:4;:9;899:78;;932:8;;;;;:::i;:::-;;;;963:2;955:10;;;;;:::i;:::-;;;899:78;;;987:19;1019:6;1009:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;987:39;;1037:154;1053:1;1044:5;:10;1037:154;;1081:1;1071:11;;;;;:::i;:::-;;;1148:2;1140:5;:10;;;;:::i;:::-;1127:2;:24;;;;:::i;:::-;1114:39;;1097:6;1104;1097:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1177:2;1168:11;;;;;:::i;:::-;;;1037:154;;;1215:6;1201:21;;;;;507:723;;;;:::o;17556:157::-;17641:4;17680:25;17665:40;;;:11;:40;;;;17658:47;;17556:157;;;:::o;41763:589::-;41907:45;41934:4;41940:2;41944:7;41907:26;:45::i;:::-;41985:1;41969:18;;:4;:18;;;41965:187;;;42004:40;42036:7;42004:31;:40::i;:::-;41965:187;;;42074:2;42066:10;;:4;:10;;;42062:90;;42093:47;42126:4;42132:7;42093:32;:47::i;:::-;42062:90;41965:187;42180:1;42166:16;;:2;:16;;;42162:183;;;42199:45;42236:7;42199:36;:45::i;:::-;42162:183;;;42272:4;42266:10;;:2;:10;;;42262:83;;42293:40;42321:2;42325:7;42293:27;:40::i;:::-;42262:83;42162:183;41763:589;;;:::o;38944:125::-;;;;:::o;32764:319::-;32893:18;32899:2;32903:7;32893:5;:18::i;:::-;32944:53;32975:1;32979:2;32983:7;32992:4;32944:22;:53::i;:::-;32922:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;32764:319;;;:::o;37008:853::-;37162:4;37183:15;:2;:13;;;:15::i;:::-;37179:675;;;37235:2;37219:36;;;37256:12;:10;:12::i;:::-;37270:4;37276:7;37285:4;37219:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37215:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37477:1;37460:6;:13;:18;37456:328;;;37503:60;;;;;;;;;;:::i;:::-;;;;;;;;37456:328;37734:6;37728:13;37719:6;37715:2;37711:15;37704:38;37215:584;37351:41;;;37341:51;;;:6;:51;;;;37334:58;;;;;37179:675;37838:4;37831:11;;37008:853;;;;;;;:::o;38433:126::-;;;;:::o;43075:164::-;43179:10;:17;;;;43152:15;:24;43168:7;43152:24;;;;;;;;;;;:44;;;;43207:10;43223:7;43207:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43075:164;:::o;43866:988::-;44132:22;44182:1;44157:22;44174:4;44157:16;:22::i;:::-;:26;;;;:::i;:::-;44132:51;;44194:18;44215:17;:26;44233:7;44215:26;;;;;;;;;;;;44194:47;;44362:14;44348:10;:28;44344:328;;44393:19;44415:12;:18;44428:4;44415:18;;;;;;;;;;;;;;;:34;44434:14;44415:34;;;;;;;;;;;;44393:56;;44499:11;44466:12;:18;44479:4;44466:18;;;;;;;;;;;;;;;:30;44485:10;44466:30;;;;;;;;;;;:44;;;;44616:10;44583:17;:30;44601:11;44583:30;;;;;;;;;;;:43;;;;44344:328;;44768:17;:26;44786:7;44768:26;;;;;;;;;;;44761:33;;;44812:12;:18;44825:4;44812:18;;;;;;;;;;;;;;;:34;44831:14;44812:34;;;;;;;;;;;44805:41;;;43866:988;;;;:::o;45149:1079::-;45402:22;45447:1;45427:10;:17;;;;:21;;;;:::i;:::-;45402:46;;45459:18;45480:15;:24;45496:7;45480:24;;;;;;;;;;;;45459:45;;45831:19;45853:10;45864:14;45853:26;;;;;;;;;;;;;;;;;;;;;;;;45831:48;;45917:11;45892:10;45903;45892:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;46028:10;45997:15;:28;46013:11;45997:28;;;;;;;;;;;:41;;;;46169:15;:24;46185:7;46169:24;;;;;;;;;;;46162:31;;;46204:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45149:1079;;;;:::o;42653:221::-;42738:14;42755:20;42772:2;42755:16;:20::i;:::-;42738:37;;42813:7;42786:12;:16;42799:2;42786:16;;;;;;;;;;;;;;;:24;42803:6;42786:24;;;;;;;;;;;:34;;;;42860:6;42831:17;:26;42849:7;42831:26;;;;;;;;;;;:35;;;;42653:221;;;:::o;33419:439::-;33513:1;33499:16;;:2;:16;;;;33491:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33572:16;33580:7;33572;:16::i;:::-;33571:17;33563:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33634:45;33663:1;33667:2;33671:7;33634:20;:45::i;:::-;33709:1;33692:9;:13;33702:2;33692:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33740:2;33721:7;:16;33729:7;33721:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33785:7;33781:2;33760:33;;33777:1;33760:33;;;;;;;;;;;;33806:44;33834:1;33838:2;33842:7;33806:19;:44::i;:::-;33419:439;;:::o;7400:326::-;7460:4;7717:1;7695:7;:12;;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;7688:30;;7400:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;867:367::-;;;1000:3;993:4;985:6;981:17;977:27;967:2;;1018:1;1015;1008:12;967:2;1054:6;1041:20;1031:30;;1084:18;1076:6;1073:30;1070:2;;;1116:1;1113;1106:12;1070:2;1153:4;1145:6;1141:17;1129:29;;1207:3;1199:4;1191:6;1187:17;1177:8;1173:32;1170:41;1167:2;;;1224:1;1221;1214:12;1167:2;957:277;;;;;:::o;1240:133::-;;1321:6;1308:20;1299:29;;1337:30;1361:5;1337:30;:::i;:::-;1289:84;;;;:::o;1379:137::-;;1462:6;1449:20;1440:29;;1478:32;1504:5;1478:32;:::i;:::-;1430:86;;;;:::o;1522:141::-;;1609:6;1603:13;1594:22;;1625:32;1651:5;1625:32;:::i;:::-;1584:79;;;;:::o;1682:271::-;;1786:3;1779:4;1771:6;1767:17;1763:27;1753:2;;1804:1;1801;1794:12;1753:2;1844:6;1831:20;1869:78;1943:3;1935:6;1928:4;1920:6;1916:17;1869:78;:::i;:::-;1860:87;;1743:210;;;;;:::o;1973:273::-;;2078:3;2071:4;2063:6;2059:17;2055:27;2045:2;;2096:1;2093;2086:12;2045:2;2136:6;2123:20;2161:79;2236:3;2228:6;2221:4;2213:6;2209:17;2161:79;:::i;:::-;2152:88;;2035:211;;;;;:::o;2252:139::-;;2336:6;2323:20;2314:29;;2352:33;2379:5;2352:33;:::i;:::-;2304:87;;;;:::o;2397:262::-;;2505:2;2493:9;2484:7;2480:23;2476:32;2473:2;;;2521:1;2518;2511:12;2473:2;2564:1;2589:53;2634:7;2625:6;2614:9;2610:22;2589:53;:::i;:::-;2579:63;;2535:117;2463:196;;;;:::o;2665:407::-;;;2790:2;2778:9;2769:7;2765:23;2761:32;2758:2;;;2806:1;2803;2796:12;2758:2;2849:1;2874:53;2919:7;2910:6;2899:9;2895:22;2874:53;:::i;:::-;2864:63;;2820:117;2976:2;3002:53;3047:7;3038:6;3027:9;3023:22;3002:53;:::i;:::-;2992:63;;2947:118;2748:324;;;;;:::o;3078:552::-;;;;3220:2;3208:9;3199:7;3195:23;3191:32;3188:2;;;3236:1;3233;3226:12;3188:2;3279:1;3304:53;3349:7;3340:6;3329:9;3325:22;3304:53;:::i;:::-;3294:63;;3250:117;3406:2;3432:53;3477:7;3468:6;3457:9;3453:22;3432:53;:::i;:::-;3422:63;;3377:118;3534:2;3560:53;3605:7;3596:6;3585:9;3581:22;3560:53;:::i;:::-;3550:63;;3505:118;3178:452;;;;;:::o;3636:809::-;;;;;3804:3;3792:9;3783:7;3779:23;3775:33;3772:2;;;3821:1;3818;3811:12;3772:2;3864:1;3889:53;3934:7;3925:6;3914:9;3910:22;3889:53;:::i;:::-;3879:63;;3835:117;3991:2;4017:53;4062:7;4053:6;4042:9;4038:22;4017:53;:::i;:::-;4007:63;;3962:118;4119:2;4145:53;4190:7;4181:6;4170:9;4166:22;4145:53;:::i;:::-;4135:63;;4090:118;4275:2;4264:9;4260:18;4247:32;4306:18;4298:6;4295:30;4292:2;;;4338:1;4335;4328:12;4292:2;4366:62;4420:7;4411:6;4400:9;4396:22;4366:62;:::i;:::-;4356:72;;4218:220;3762:683;;;;;;;:::o;4451:401::-;;;4573:2;4561:9;4552:7;4548:23;4544:32;4541:2;;;4589:1;4586;4579:12;4541:2;4632:1;4657:53;4702:7;4693:6;4682:9;4678:22;4657:53;:::i;:::-;4647:63;;4603:117;4759:2;4785:50;4827:7;4818:6;4807:9;4803:22;4785:50;:::i;:::-;4775:60;;4730:115;4531:321;;;;;:::o;4858:407::-;;;4983:2;4971:9;4962:7;4958:23;4954:32;4951:2;;;4999:1;4996;4989:12;4951:2;5042:1;5067:53;5112:7;5103:6;5092:9;5088:22;5067:53;:::i;:::-;5057:63;;5013:117;5169:2;5195:53;5240:7;5231:6;5220:9;5216:22;5195:53;:::i;:::-;5185:63;;5140:118;4941:324;;;;;:::o;5271:425::-;;;5414:2;5402:9;5393:7;5389:23;5385:32;5382:2;;;5430:1;5427;5420:12;5382:2;5501:1;5490:9;5486:17;5473:31;5531:18;5523:6;5520:30;5517:2;;;5563:1;5560;5553:12;5517:2;5599:80;5671:7;5662:6;5651:9;5647:22;5599:80;:::i;:::-;5581:98;;;;5444:245;5372:324;;;;;:::o;5702:256::-;;5807:2;5795:9;5786:7;5782:23;5778:32;5775:2;;;5823:1;5820;5813:12;5775:2;5866:1;5891:50;5933:7;5924:6;5913:9;5909:22;5891:50;:::i;:::-;5881:60;;5837:114;5765:193;;;;:::o;5964:260::-;;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6087:1;6084;6077:12;6039:2;6130:1;6155:52;6199:7;6190:6;6179:9;6175:22;6155:52;:::i;:::-;6145:62;;6101:116;6029:195;;;;:::o;6230:282::-;;6348:2;6336:9;6327:7;6323:23;6319:32;6316:2;;;6364:1;6361;6354:12;6316:2;6407:1;6432:63;6487:7;6478:6;6467:9;6463:22;6432:63;:::i;:::-;6422:73;;6378:127;6306:206;;;;:::o;6518:375::-;;6636:2;6624:9;6615:7;6611:23;6607:32;6604:2;;;6652:1;6649;6642:12;6604:2;6723:1;6712:9;6708:17;6695:31;6753:18;6745:6;6742:30;6739:2;;;6785:1;6782;6775:12;6739:2;6813:63;6868:7;6859:6;6848:9;6844:22;6813:63;:::i;:::-;6803:73;;6666:220;6594:299;;;;:::o;6899:262::-;;7007:2;6995:9;6986:7;6982:23;6978:32;6975:2;;;7023:1;7020;7013:12;6975:2;7066:1;7091:53;7136:7;7127:6;7116:9;7112:22;7091:53;:::i;:::-;7081:63;;7037:117;6965:196;;;;:::o;7167:179::-;;7257:46;7299:3;7291:6;7257:46;:::i;:::-;7335:4;7330:3;7326:14;7312:28;;7247:99;;;;:::o;7352:118::-;7439:24;7457:5;7439:24;:::i;:::-;7434:3;7427:37;7417:53;;:::o;7506:732::-;;7654:54;7702:5;7654:54;:::i;:::-;7724:86;7803:6;7798:3;7724:86;:::i;:::-;7717:93;;7834:56;7884:5;7834:56;:::i;:::-;7913:7;7944:1;7929:284;7954:6;7951:1;7948:13;7929:284;;;8030:6;8024:13;8057:63;8116:3;8101:13;8057:63;:::i;:::-;8050:70;;8143:60;8196:6;8143:60;:::i;:::-;8133:70;;7989:224;7976:1;7973;7969:9;7964:14;;7929:284;;;7933:14;8229:3;8222:10;;7630:608;;;;;;;:::o;8244:109::-;8325:21;8340:5;8325:21;:::i;:::-;8320:3;8313:34;8303:50;;:::o;8359:360::-;;8473:38;8505:5;8473:38;:::i;:::-;8527:70;8590:6;8585:3;8527:70;:::i;:::-;8520:77;;8606:52;8651:6;8646:3;8639:4;8632:5;8628:16;8606:52;:::i;:::-;8683:29;8705:6;8683:29;:::i;:::-;8678:3;8674:39;8667:46;;8449:270;;;;;:::o;8725:364::-;;8841:39;8874:5;8841:39;:::i;:::-;8896:71;8960:6;8955:3;8896:71;:::i;:::-;8889:78;;8976:52;9021:6;9016:3;9009:4;9002:5;8998:16;8976:52;:::i;:::-;9053:29;9075:6;9053:29;:::i;:::-;9048:3;9044:39;9037:46;;8817:272;;;;;:::o;9095:377::-;;9229:39;9262:5;9229:39;:::i;:::-;9284:89;9366:6;9361:3;9284:89;:::i;:::-;9277:96;;9382:52;9427:6;9422:3;9415:4;9408:5;9404:16;9382:52;:::i;:::-;9459:6;9454:3;9450:16;9443:23;;9205:267;;;;;:::o;9502:845::-;;9642:5;9636:12;9671:36;9697:9;9671:36;:::i;:::-;9723:89;9805:6;9800:3;9723:89;:::i;:::-;9716:96;;9843:1;9832:9;9828:17;9859:1;9854:137;;;;10005:1;10000:341;;;;9821:520;;9854:137;9938:4;9934:9;9923;9919:25;9914:3;9907:38;9974:6;9969:3;9965:16;9958:23;;9854:137;;10000:341;10067:38;10099:5;10067:38;:::i;:::-;10127:1;10141:154;10155:6;10152:1;10149:13;10141:154;;;10229:7;10223:14;10219:1;10214:3;10210:11;10203:35;10279:1;10270:7;10266:15;10255:26;;10177:4;10174:1;10170:12;10165:17;;10141:154;;;10324:6;10319:3;10315:16;10308:23;;10007:334;;9821:520;;9609:738;;;;;;:::o;10353:375::-;;10516:67;10580:2;10575:3;10516:67;:::i;:::-;10509:74;;10613:34;10609:1;10604:3;10600:11;10593:55;10679:13;10674:2;10669:3;10665:12;10658:35;10719:2;10714:3;10710:12;10703:19;;10499:229;;;:::o;10734:382::-;;10897:67;10961:2;10956:3;10897:67;:::i;:::-;10890:74;;10994:34;10990:1;10985:3;10981:11;10974:55;11060:20;11055:2;11050:3;11046:12;11039:42;11107:2;11102:3;11098:12;11091:19;;10880:236;;;:::o;11122:370::-;;11285:67;11349:2;11344:3;11285:67;:::i;:::-;11278:74;;11382:34;11378:1;11373:3;11369:11;11362:55;11448:8;11443:2;11438:3;11434:12;11427:30;11483:2;11478:3;11474:12;11467:19;;11268:224;;;:::o;11498:369::-;;11661:67;11725:2;11720:3;11661:67;:::i;:::-;11654:74;;11758:34;11754:1;11749:3;11745:11;11738:55;11824:7;11819:2;11814:3;11810:12;11803:29;11858:2;11853:3;11849:12;11842:19;;11644:223;;;:::o;11873:326::-;;12036:67;12100:2;12095:3;12036:67;:::i;:::-;12029:74;;12133:30;12129:1;12124:3;12120:11;12113:51;12190:2;12185:3;12181:12;12174:19;;12019:180;;;:::o;12205:326::-;;12368:67;12432:2;12427:3;12368:67;:::i;:::-;12361:74;;12465:30;12461:1;12456:3;12452:11;12445:51;12522:2;12517:3;12513:12;12506:19;;12351:180;;;:::o;12537:368::-;;12700:67;12764:2;12759:3;12700:67;:::i;:::-;12693:74;;12797:34;12793:1;12788:3;12784:11;12777:55;12863:6;12858:2;12853:3;12849:12;12842:28;12896:2;12891:3;12887:12;12880:19;;12683:222;;;:::o;12911:323::-;;13074:67;13138:2;13133:3;13074:67;:::i;:::-;13067:74;;13171:27;13167:1;13162:3;13158:11;13151:48;13225:2;13220:3;13216:12;13209:19;;13057:177;;;:::o;13240:373::-;;13403:67;13467:2;13462:3;13403:67;:::i;:::-;13396:74;;13500:34;13496:1;13491:3;13487:11;13480:55;13566:11;13561:2;13556:3;13552:12;13545:33;13604:2;13599:3;13595:12;13588:19;;13386:227;;;:::o;13619:320::-;;13782:67;13846:2;13841:3;13782:67;:::i;:::-;13775:74;;13879:24;13875:1;13870:3;13866:11;13859:45;13930:2;13925:3;13921:12;13914:19;;13765:174;;;:::o;13945:368::-;;14108:67;14172:2;14167:3;14108:67;:::i;:::-;14101:74;;14205:34;14201:1;14196:3;14192:11;14185:55;14271:6;14266:2;14261:3;14257:12;14250:28;14304:2;14299:3;14295:12;14288:19;;14091:222;;;:::o;14319:394::-;;14482:67;14546:2;14541:3;14482:67;:::i;:::-;14475:74;;14579:34;14575:1;14570:3;14566:11;14559:55;14645:32;14640:2;14635:3;14631:12;14624:54;14704:2;14699:3;14695:12;14688:19;;14465:248;;;:::o;14719:330::-;;14882:67;14946:2;14941:3;14882:67;:::i;:::-;14875:74;;14979:34;14975:1;14970:3;14966:11;14959:55;15040:2;15035:3;15031:12;15024:19;;14865:184;;;:::o;15055:330::-;;15218:67;15282:2;15277:3;15218:67;:::i;:::-;15211:74;;15315:34;15311:1;15306:3;15302:11;15295:55;15376:2;15371:3;15367:12;15360:19;;15201:184;;;:::o;15391:320::-;;15554:67;15618:2;15613:3;15554:67;:::i;:::-;15547:74;;15651:24;15647:1;15642:3;15638:11;15631:45;15702:2;15697:3;15693:12;15686:19;;15537:174;;;:::o;15717:379::-;;15880:67;15944:2;15939:3;15880:67;:::i;:::-;15873:74;;15977:34;15973:1;15968:3;15964:11;15957:55;16043:17;16038:2;16033:3;16029:12;16022:39;16087:2;16082:3;16078:12;16071:19;;15863:233;;;:::o;16102:322::-;;16265:67;16329:2;16324:3;16265:67;:::i;:::-;16258:74;;16362:26;16358:1;16353:3;16349:11;16342:47;16415:2;16410:3;16406:12;16399:19;;16248:176;;;:::o;16430:365::-;;16593:67;16657:2;16652:3;16593:67;:::i;:::-;16586:74;;16690:34;16686:1;16681:3;16677:11;16670:55;16756:3;16751:2;16746:3;16742:12;16735:25;16786:2;16781:3;16777:12;16770:19;;16576:219;;;:::o;16801:297::-;;16981:83;17062:1;17057:3;16981:83;:::i;:::-;16974:90;;17090:1;17085:3;17081:11;17074:18;;16964:134;;;:::o;17104:316::-;;17267:67;17331:2;17326:3;17267:67;:::i;:::-;17260:74;;17364:20;17360:1;17355:3;17351:11;17344:41;17411:2;17406:3;17402:12;17395:19;;17250:170;;;:::o;17426:376::-;;17589:67;17653:2;17648:3;17589:67;:::i;:::-;17582:74;;17686:34;17682:1;17677:3;17673:11;17666:55;17752:14;17747:2;17742:3;17738:12;17731:36;17793:2;17788:3;17784:12;17777:19;;17572:230;;;:::o;17808:321::-;;17971:67;18035:2;18030:3;17971:67;:::i;:::-;17964:74;;18068:25;18064:1;18059:3;18055:11;18048:46;18120:2;18115:3;18111:12;18104:19;;17954:175;;;:::o;18135:378::-;;18298:67;18362:2;18357:3;18298:67;:::i;:::-;18291:74;;18395:34;18391:1;18386:3;18382:11;18375:55;18461:16;18456:2;18451:3;18447:12;18440:38;18504:2;18499:3;18495:12;18488:19;;18281:232;;;:::o;18519:325::-;;18682:67;18746:2;18741:3;18682:67;:::i;:::-;18675:74;;18779:29;18775:1;18770:3;18766:11;18759:50;18835:2;18830:3;18826:12;18819:19;;18665:179;;;:::o;18850:108::-;18927:24;18945:5;18927:24;:::i;:::-;18922:3;18915:37;18905:53;;:::o;18964:118::-;19051:24;19069:5;19051:24;:::i;:::-;19046:3;19039:37;19029:53;;:::o;19088:589::-;;19335:95;19426:3;19417:6;19335:95;:::i;:::-;19328:102;;19447:95;19538:3;19529:6;19447:95;:::i;:::-;19440:102;;19559:92;19647:3;19638:6;19559:92;:::i;:::-;19552:99;;19668:3;19661:10;;19317:360;;;;;;:::o;19683:379::-;;19889:147;20032:3;19889:147;:::i;:::-;19882:154;;20053:3;20046:10;;19871:191;;;:::o;20068:222::-;;20199:2;20188:9;20184:18;20176:26;;20212:71;20280:1;20269:9;20265:17;20256:6;20212:71;:::i;:::-;20166:124;;;;:::o;20296:640::-;;20529:3;20518:9;20514:19;20506:27;;20543:71;20611:1;20600:9;20596:17;20587:6;20543:71;:::i;:::-;20624:72;20692:2;20681:9;20677:18;20668:6;20624:72;:::i;:::-;20706;20774:2;20763:9;20759:18;20750:6;20706:72;:::i;:::-;20825:9;20819:4;20815:20;20810:2;20799:9;20795:18;20788:48;20853:76;20924:4;20915:6;20853:76;:::i;:::-;20845:84;;20496:440;;;;;;;:::o;20942:373::-;;21123:2;21112:9;21108:18;21100:26;;21172:9;21166:4;21162:20;21158:1;21147:9;21143:17;21136:47;21200:108;21303:4;21294:6;21200:108;:::i;:::-;21192:116;;21090:225;;;;:::o;21321:210::-;;21446:2;21435:9;21431:18;21423:26;;21459:65;21521:1;21510:9;21506:17;21497:6;21459:65;:::i;:::-;21413:118;;;;:::o;21537:313::-;;21688:2;21677:9;21673:18;21665:26;;21737:9;21731:4;21727:20;21723:1;21712:9;21708:17;21701:47;21765:78;21838:4;21829:6;21765:78;:::i;:::-;21757:86;;21655:195;;;;:::o;21856:419::-;;22060:2;22049:9;22045:18;22037:26;;22109:9;22103:4;22099:20;22095:1;22084:9;22080:17;22073:47;22137:131;22263:4;22137:131;:::i;:::-;22129:139;;22027:248;;;:::o;22281:419::-;;22485:2;22474:9;22470:18;22462:26;;22534:9;22528:4;22524:20;22520:1;22509:9;22505:17;22498:47;22562:131;22688:4;22562:131;:::i;:::-;22554:139;;22452:248;;;:::o;22706:419::-;;22910:2;22899:9;22895:18;22887:26;;22959:9;22953:4;22949:20;22945:1;22934:9;22930:17;22923:47;22987:131;23113:4;22987:131;:::i;:::-;22979:139;;22877:248;;;:::o;23131:419::-;;23335:2;23324:9;23320:18;23312:26;;23384:9;23378:4;23374:20;23370:1;23359:9;23355:17;23348:47;23412:131;23538:4;23412:131;:::i;:::-;23404:139;;23302:248;;;:::o;23556:419::-;;23760:2;23749:9;23745:18;23737:26;;23809:9;23803:4;23799:20;23795:1;23784:9;23780:17;23773:47;23837:131;23963:4;23837:131;:::i;:::-;23829:139;;23727:248;;;:::o;23981:419::-;;24185:2;24174:9;24170:18;24162:26;;24234:9;24228:4;24224:20;24220:1;24209:9;24205:17;24198:47;24262:131;24388:4;24262:131;:::i;:::-;24254:139;;24152:248;;;:::o;24406:419::-;;24610:2;24599:9;24595:18;24587:26;;24659:9;24653:4;24649:20;24645:1;24634:9;24630:17;24623:47;24687:131;24813:4;24687:131;:::i;:::-;24679:139;;24577:248;;;:::o;24831:419::-;;25035:2;25024:9;25020:18;25012:26;;25084:9;25078:4;25074:20;25070:1;25059:9;25055:17;25048:47;25112:131;25238:4;25112:131;:::i;:::-;25104:139;;25002:248;;;:::o;25256:419::-;;25460:2;25449:9;25445:18;25437:26;;25509:9;25503:4;25499:20;25495:1;25484:9;25480:17;25473:47;25537:131;25663:4;25537:131;:::i;:::-;25529:139;;25427:248;;;:::o;25681:419::-;;25885:2;25874:9;25870:18;25862:26;;25934:9;25928:4;25924:20;25920:1;25909:9;25905:17;25898:47;25962:131;26088:4;25962:131;:::i;:::-;25954:139;;25852:248;;;:::o;26106:419::-;;26310:2;26299:9;26295:18;26287:26;;26359:9;26353:4;26349:20;26345:1;26334:9;26330:17;26323:47;26387:131;26513:4;26387:131;:::i;:::-;26379:139;;26277:248;;;:::o;26531:419::-;;26735:2;26724:9;26720:18;26712:26;;26784:9;26778:4;26774:20;26770:1;26759:9;26755:17;26748:47;26812:131;26938:4;26812:131;:::i;:::-;26804:139;;26702:248;;;:::o;26956:419::-;;27160:2;27149:9;27145:18;27137:26;;27209:9;27203:4;27199:20;27195:1;27184:9;27180:17;27173:47;27237:131;27363:4;27237:131;:::i;:::-;27229:139;;27127:248;;;:::o;27381:419::-;;27585:2;27574:9;27570:18;27562:26;;27634:9;27628:4;27624:20;27620:1;27609:9;27605:17;27598:47;27662:131;27788:4;27662:131;:::i;:::-;27654:139;;27552:248;;;:::o;27806:419::-;;28010:2;27999:9;27995:18;27987:26;;28059:9;28053:4;28049:20;28045:1;28034:9;28030:17;28023:47;28087:131;28213:4;28087:131;:::i;:::-;28079:139;;27977:248;;;:::o;28231:419::-;;28435:2;28424:9;28420:18;28412:26;;28484:9;28478:4;28474:20;28470:1;28459:9;28455:17;28448:47;28512:131;28638:4;28512:131;:::i;:::-;28504:139;;28402:248;;;:::o;28656:419::-;;28860:2;28849:9;28845:18;28837:26;;28909:9;28903:4;28899:20;28895:1;28884:9;28880:17;28873:47;28937:131;29063:4;28937:131;:::i;:::-;28929:139;;28827:248;;;:::o;29081:419::-;;29285:2;29274:9;29270:18;29262:26;;29334:9;29328:4;29324:20;29320:1;29309:9;29305:17;29298:47;29362:131;29488:4;29362:131;:::i;:::-;29354:139;;29252:248;;;:::o;29506:419::-;;29710:2;29699:9;29695:18;29687:26;;29759:9;29753:4;29749:20;29745:1;29734:9;29730:17;29723:47;29787:131;29913:4;29787:131;:::i;:::-;29779:139;;29677:248;;;:::o;29931:419::-;;30135:2;30124:9;30120:18;30112:26;;30184:9;30178:4;30174:20;30170:1;30159:9;30155:17;30148:47;30212:131;30338:4;30212:131;:::i;:::-;30204:139;;30102:248;;;:::o;30356:419::-;;30560:2;30549:9;30545:18;30537:26;;30609:9;30603:4;30599:20;30595:1;30584:9;30580:17;30573:47;30637:131;30763:4;30637:131;:::i;:::-;30629:139;;30527:248;;;:::o;30781:419::-;;30985:2;30974:9;30970:18;30962:26;;31034:9;31028:4;31024:20;31020:1;31009:9;31005:17;30998:47;31062:131;31188:4;31062:131;:::i;:::-;31054:139;;30952:248;;;:::o;31206:419::-;;31410:2;31399:9;31395:18;31387:26;;31459:9;31453:4;31449:20;31445:1;31434:9;31430:17;31423:47;31487:131;31613:4;31487:131;:::i;:::-;31479:139;;31377:248;;;:::o;31631:222::-;;31762:2;31751:9;31747:18;31739:26;;31775:71;31843:1;31832:9;31828:17;31819:6;31775:71;:::i;:::-;31729:124;;;;:::o;31859:283::-;;31925:2;31919:9;31909:19;;31967:4;31959:6;31955:17;32074:6;32062:10;32059:22;32038:18;32026:10;32023:34;32020:62;32017:2;;;32085:18;;:::i;:::-;32017:2;32125:10;32121:2;32114:22;31899:243;;;;:::o;32148:331::-;;32299:18;32291:6;32288:30;32285:2;;;32321:18;;:::i;:::-;32285:2;32406:4;32402:9;32395:4;32387:6;32383:17;32379:33;32371:41;;32467:4;32461;32457:15;32449:23;;32214:265;;;:::o;32485:332::-;;32637:18;32629:6;32626:30;32623:2;;;32659:18;;:::i;:::-;32623:2;32744:4;32740:9;32733:4;32725:6;32721:17;32717:33;32709:41;;32805:4;32799;32795:15;32787:23;;32552:265;;;:::o;32823:132::-;;32913:3;32905:11;;32943:4;32938:3;32934:14;32926:22;;32895:60;;;:::o;32961:141::-;;33033:3;33025:11;;33056:3;33053:1;33046:14;33090:4;33087:1;33077:18;33069:26;;33015:87;;;:::o;33108:114::-;;33209:5;33203:12;33193:22;;33182:40;;;:::o;33228:98::-;;33313:5;33307:12;33297:22;;33286:40;;;:::o;33332:99::-;;33418:5;33412:12;33402:22;;33391:40;;;:::o;33437:113::-;;33539:4;33534:3;33530:14;33522:22;;33512:38;;;:::o;33556:184::-;;33689:6;33684:3;33677:19;33729:4;33724:3;33720:14;33705:29;;33667:73;;;;:::o;33746:168::-;;33863:6;33858:3;33851:19;33903:4;33898:3;33894:14;33879:29;;33841:73;;;;:::o;33920:147::-;;34058:3;34043:18;;34033:34;;;;:::o;34073:169::-;;34191:6;34186:3;34179:19;34231:4;34226:3;34222:14;34207:29;;34169:73;;;;:::o;34248:148::-;;34387:3;34372:18;;34362:34;;;;:::o;34402:305::-;;34461:20;34479:1;34461:20;:::i;:::-;34456:25;;34495:20;34513:1;34495:20;:::i;:::-;34490:25;;34649:1;34581:66;34577:74;34574:1;34571:81;34568:2;;;34655:18;;:::i;:::-;34568:2;34699:1;34696;34692:9;34685:16;;34446:261;;;;:::o;34713:185::-;;34770:20;34788:1;34770:20;:::i;:::-;34765:25;;34804:20;34822:1;34804:20;:::i;:::-;34799:25;;34843:1;34833:2;;34848:18;;:::i;:::-;34833:2;34890:1;34887;34883:9;34878:14;;34755:143;;;;:::o;34904:348::-;;34967:20;34985:1;34967:20;:::i;:::-;34962:25;;35001:20;35019:1;35001:20;:::i;:::-;34996:25;;35189:1;35121:66;35117:74;35114:1;35111:81;35106:1;35099:9;35092:17;35088:105;35085:2;;;35196:18;;:::i;:::-;35085:2;35244:1;35241;35237:9;35226:20;;34952:300;;;;:::o;35258:191::-;;35318:20;35336:1;35318:20;:::i;:::-;35313:25;;35352:20;35370:1;35352:20;:::i;:::-;35347:25;;35391:1;35388;35385:8;35382:2;;;35396:18;;:::i;:::-;35382:2;35441:1;35438;35434:9;35426:17;;35303:146;;;;:::o;35455:96::-;;35521:24;35539:5;35521:24;:::i;:::-;35510:35;;35500:51;;;:::o;35557:90::-;;35634:5;35627:13;35620:21;35609:32;;35599:48;;;:::o;35653:149::-;;35729:66;35722:5;35718:78;35707:89;;35697:105;;;:::o;35808:126::-;;35885:42;35878:5;35874:54;35863:65;;35853:81;;;:::o;35940:77::-;;36006:5;35995:16;;35985:32;;;:::o;36023:154::-;36107:6;36102:3;36097;36084:30;36169:1;36160:6;36155:3;36151:16;36144:27;36074:103;;;:::o;36183:307::-;36251:1;36261:113;36275:6;36272:1;36269:13;36261:113;;;36360:1;36355:3;36351:11;36345:18;36341:1;36336:3;36332:11;36325:39;36297:2;36294:1;36290:10;36285:15;;36261:113;;;36392:6;36389:1;36386:13;36383:2;;;36472:1;36463:6;36458:3;36454:16;36447:27;36383:2;36232:258;;;;:::o;36496:320::-;;36577:1;36571:4;36567:12;36557:22;;36624:1;36618:4;36614:12;36645:18;36635:2;;36701:4;36693:6;36689:17;36679:27;;36635:2;36763;36755:6;36752:14;36732:18;36729:38;36726:2;;;36782:18;;:::i;:::-;36726:2;36547:269;;;;:::o;36822:233::-;;36884:24;36902:5;36884:24;:::i;:::-;36875:33;;36930:66;36923:5;36920:77;36917:2;;;37000:18;;:::i;:::-;36917:2;37047:1;37040:5;37036:13;37029:20;;36865:190;;;:::o;37061:176::-;;37110:20;37128:1;37110:20;:::i;:::-;37105:25;;37144:20;37162:1;37144:20;:::i;:::-;37139:25;;37183:1;37173:2;;37188:18;;:::i;:::-;37173:2;37229:1;37226;37222:9;37217:14;;37095:142;;;;:::o;37243:180::-;37291:77;37288:1;37281:88;37388:4;37385:1;37378:15;37412:4;37409:1;37402:15;37429:180;37477:77;37474:1;37467:88;37574:4;37571:1;37564:15;37598:4;37595:1;37588:15;37615:180;37663:77;37660:1;37653:88;37760:4;37757:1;37750:15;37784:4;37781:1;37774:15;37801:180;37849:77;37846:1;37839:88;37946:4;37943:1;37936:15;37970:4;37967:1;37960:15;37987:102;;38079:2;38075:7;38070:2;38063:5;38059:14;38055:28;38045:38;;38035:54;;;:::o;38095:122::-;38168:24;38186:5;38168:24;:::i;:::-;38161:5;38158:35;38148:2;;38207:1;38204;38197:12;38148:2;38138:79;:::o;38223:116::-;38293:21;38308:5;38293:21;:::i;:::-;38286:5;38283:32;38273:2;;38329:1;38326;38319:12;38273:2;38263:76;:::o;38345:120::-;38417:23;38434:5;38417:23;:::i;:::-;38410:5;38407:34;38397:2;;38455:1;38452;38445:12;38397:2;38387:78;:::o;38471:122::-;38544:24;38562:5;38544:24;:::i;:::-;38537:5;38534:35;38524:2;;38583:1;38580;38573:12;38524:2;38514:79;:::o

Swarm Source

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