ETH Price: $3,122.36 (-5.38%)
 

Overview

Max Total Supply

2,000 WMG

Holders

225

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
nys4162.eth
Balance
33 WMG
0x66169f8f3923297b153d2d47c8d9502485d49bec
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
NFT_Minting

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-09
*/

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

// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC721/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/utils/Address.sol

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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/contracts/utils/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/ERC721.sol

// OpenZeppelin Contracts (last updated v4.5.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: balance query for the zero address");
        return _balances[owner];
    }

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _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: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @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/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/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: @openzeppelin/contracts/access/Ownable.sol

// OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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: Desktop/All_Clients_contracts/contracts/NFT_minting_Nana.sol


pragma solidity ^0.8.7;


contract NFT_Minting is ERC721Enumerable, Ownable {
    using Strings for uint256;
    string private unRevealedURL="ipfs://QmUfUzp5c1eppUzmM7Yey7r3wNuaxwgwkBAg2xnJuBubv4/unreveal.json";
    bool public isRevealed=false; //private


    uint public Presale_Start_Time;
    uint public Presale_End_Time;
    string public baseURI; //private
    string public baseExtension = ".json";
    uint256 public cost = 0.018 ether;
    uint256 public presaleCost = 0.01 ether;
    uint256 public maxSupply = 2000;
    uint256 public maxMintAmount = 15;
    bool public paused = false;
    uint public NFT_Free_Time;

    mapping(address => bool) public whitelisted;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        uint _Presale_End_Time,
        uint _NFT_Free_Time


    ) ERC721(_name, _symbol) {


        setBaseURI(_initBaseURI);
    //    mint(msg.sender, 20);
        Presale_End_Time= block.timestamp+(_Presale_End_Time * 1 days);
        Presale_Start_Time=block.timestamp;
        NFT_Free_Time = block.timestamp+( _NFT_Free_Time * 1 days );



    }

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

    // public
    function mint(address _to, uint256 _mintAmount) public payable {

        uint256 supply = totalSupply();
        require(!paused,"minting is paused");
        require(_mintAmount > 0,"you didn't add any number");
        require(supply + _mintAmount <= maxSupply,"all Nfts has been sold");

        if (msg.sender != owner()) {

            if(NFT_Free_Time > block.timestamp){
  
                if (whitelisted[msg.sender] != true) {
                    require(_mintAmount <= maxMintAmount,"you cant mint more");

                    if (block.timestamp<=Presale_End_Time) {
                        //preSale
                        require(msg.value >= presaleCost * _mintAmount,"hello6");
                        for (uint256 i = 1; i <= _mintAmount; i++) {
                            _safeMint(_to, supply + i);
                        }
                    } else {
                        //publicSale
                        require(msg.value >= cost * _mintAmount,"paying less than the public sale cost");
                        for (uint256 i = 1; i <= _mintAmount; i++) {
                            _safeMint(_to, supply + i);
                        }
                        
                    }
                }
                else{
                    require(_mintAmount <= maxMintAmount,"you cant mint more");

                    if (block.timestamp<=Presale_End_Time) {
                        //preSale
                        require(msg.value >= presaleCost * (_mintAmount-1),"paying less than the PreSale cost");

                    } else {
                        //publicSale
                        require(msg.value >= cost * (_mintAmount-1),"paying less than the public sale cost");
                        
                    }
                    whitelisted[msg.sender]=false;
                    for (uint256 i = 1; i <= _mintAmount; i++) {
                    _safeMint(_to, supply + i);
                    }
                }
            }
            else{

                require(_mintAmount <= maxMintAmount,"you cant mint more");
                for (uint256 i = 1; i <= _mintAmount; i++) 
                {
                    _safeMint(_to, supply + i);
                }
            }
        }
        else
        {
            for (uint256 i = 1; i <= _mintAmount; i++) 
            {
                _safeMint(_to, supply + i);
            }
        }

    }

    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)
    {
        if(Presale_Start_Time + 7 days < block.timestamp)
        {
            require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

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

    }

    // function reveal_collection()public onlyOwner
    // {
    //     require(isRevealed!=true,"Collection is already revealed");
    //     isRevealed = true;
    // } 

    //only owner
    function setCost(uint256 _newCost) public onlyOwner
    {
        cost = _newCost;
    }

    function setPresaleCost(uint256 _newCost) public onlyOwner 
    {
        presaleCost = _newCost;
    }

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

    function setMaxSupply(uint256 _newMaxSupply) public onlyOwner 
    {
        maxSupply = _newMaxSupply;
    }

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

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

    function pause(bool _state) public onlyOwner 
    {
        paused = _state;
    }

    function addWhitelistUsers(address[] memory _users) public onlyOwner 
    {
        uint total_users = _users.length;
        for (uint256 i = 0; i < total_users; i++) {
            whitelisted[_users[i]] = true;
        }
    }
    function removeWhitelistUsers(address[] memory _users) public onlyOwner 
    {
        uint total_users = _users.length;
        for (uint256 i = 0; i < total_users; i++) {
            whitelisted[_users[i]] = false;
        }
    }

    function Increase_Presale_Time(uint _days) public onlyOwner {
        if (block.timestamp<=Presale_End_Time)
        {
            Presale_End_Time=Presale_End_Time + (_days* 1 days);
        }
        else{
            Presale_End_Time=block.timestamp + (_days* 1 days);
        }

    }

    function End_preSale() external onlyOwner
    {
        require(block.timestamp>Presale_End_Time,"presale is already ended");
        Presale_End_Time=block.timestamp ;
    }

    function totalearning() public view onlyOwner returns(uint)
    {
        return address(this).balance;
    }

    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success);
    }

    function curr_time() public view returns(uint) {
        return block.timestamp;
    }

    function AirDrop(address[] calldata _to,uint256[] calldata _id) external onlyOwner
    {
        require(_to.length == _id.length,"receivers and ids have different lengths");
        for(uint i=0;i<_to.length;i++)
        {
            safeTransferFrom(msg.sender,_to[i],_id[i]);
        }
    }

}

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":"uint256","name":"_Presale_End_Time","type":"uint256"},{"internalType":"uint256","name":"_NFT_Free_Time","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_id","type":"uint256[]"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"End_preSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"Increase_Presale_Time","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"NFT_Free_Time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Presale_End_Time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Presale_Start_Time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addWhitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curr_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","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":"address","name":"_to","type":"address"},{"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":"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":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"removeWhitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"_newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPresaleCost","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":[],"name":"totalearning","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405260405180608001604052806043815260200162005fef60439139600b90805190602001906200003592919062000372565b506000600c60006101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601090805190602001906200009e92919062000372565b50663ff2e795f50000601155662386f26fc100006012556107d0601355600f6014556000601560006101000a81548160ff021916908315150217905550348015620000e857600080fd5b50604051620060323803806200603283398181016040528101906200010e9190620004b7565b848481600090805190602001906200012892919062000372565b5080600190805190602001906200014192919062000372565b5050506200016462000158620001cf60201b60201c565b620001d760201b60201c565b62000175836200029d60201b60201c565b6201518082620001869190620006b2565b4262000193919062000655565b600e8190555042600d819055506201518081620001b19190620006b2565b42620001be919062000655565b6016819055505050505050620008b4565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ad620001cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002d36200034860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200032c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032390620005c3565b60405180910390fd5b80600f90805190602001906200034492919062000372565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003809062000753565b90600052602060002090601f016020900481019282620003a45760008555620003f0565b82601f10620003bf57805160ff1916838001178555620003f0565b82800160010185558215620003f0579182015b82811115620003ef578251825591602001919060010190620003d2565b5b509050620003ff919062000403565b5090565b5b808211156200041e57600081600090555060010162000404565b5090565b60006200043962000433846200060e565b620005e5565b90508281526020810184848401111562000458576200045762000851565b5b620004658482856200071d565b509392505050565b600082601f8301126200048557620004846200084c565b5b81516200049784826020860162000422565b91505092915050565b600081519050620004b1816200089a565b92915050565b600080600080600060a08688031215620004d657620004d56200085b565b5b600086015167ffffffffffffffff811115620004f757620004f662000856565b5b62000505888289016200046d565b955050602086015167ffffffffffffffff81111562000529576200052862000856565b5b62000537888289016200046d565b945050604086015167ffffffffffffffff8111156200055b576200055a62000856565b5b62000569888289016200046d565b93505060606200057c88828901620004a0565b92505060806200058f88828901620004a0565b9150509295509295909350565b6000620005ab60208362000644565b9150620005b88262000871565b602082019050919050565b60006020820190508181036000830152620005de816200059c565b9050919050565b6000620005f162000604565b9050620005ff828262000789565b919050565b6000604051905090565b600067ffffffffffffffff8211156200062c576200062b6200081d565b5b620006378262000860565b9050602081019050919050565b600082825260208201905092915050565b6000620006628262000713565b91506200066f8362000713565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620006a757620006a6620007bf565b5b828201905092915050565b6000620006bf8262000713565b9150620006cc8362000713565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007085762000707620007bf565b5b828202905092915050565b6000819050919050565b60005b838110156200073d57808201518184015260208101905062000720565b838111156200074d576000848401525b50505050565b600060028204905060018216806200076c57607f821691505b60208210811415620007835762000782620007ee565b5b50919050565b620007948262000860565b810181811067ffffffffffffffff82111715620007b657620007b56200081d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620008a58162000713565b8114620008b157600080fd5b50565b61572b80620008c46000396000f3fe6080604052600436106102935760003560e01c8063686b28121161015a578063a21b31f3116100c1578063d5abeb011161007a578063d5abeb01146109c0578063d936547e146109eb578063da3ef23f14610a28578063e2edf73114610a51578063e985e9c514610a7c578063f2fde38b14610ab957610293565b8063a21b31f3146108b4578063a22cb465146108dd578063b2e1311114610906578063b88d4fde1461092f578063c668286214610958578063c87b56dd1461098357610293565b80637cbeed37116101135780637cbeed37146107b65780637f00c7a6146107e15780638da5cb5b1461080a5780638fdcf9421461083557806395d89b411461085e5780639cb464271461088957610293565b8063686b2812146106ba5780636c0360eb146106e35780636f8b44b01461070e57806370a0823114610737578063715018a6146107745780637b636ca41461078b57610293565b80633ccfd60b116101fe57806351524e5b116101b757806351524e5b146105be57806354214f69146105e75780635505017e1461061257806355f804b3146106295780635c975abb146106525780636352211e1461067d57610293565b80633ccfd60b146104cc57806340c10f19146104d657806342842e0e146104f2578063438b63001461051b57806344a0d68a146105585780634f6ccce71461058157610293565b806318160ddd1161025057806318160ddd146103ba5780631b70cd38146103e5578063239c70ae1461041057806323b872dd1461043b5780632a23d07d146104645780632f745c591461048f57610293565b806301ffc9a71461029857806302329a29146102d557806306fdde03146102fe578063081812fc14610329578063095ea7b31461036657806313faede61461038f575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613f7e565b610ae2565b6040516102cc91906146c5565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190613f51565b610b5c565b005b34801561030a57600080fd5b50610313610bf5565b60405161032091906146e0565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190614021565b610c87565b60405161035d919061463c565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190613e47565b610d0c565b005b34801561039b57600080fd5b506103a4610e24565b6040516103b19190614a62565b60405180910390f35b3480156103c657600080fd5b506103cf610e2a565b6040516103dc9190614a62565b60405180910390f35b3480156103f157600080fd5b506103fa610e37565b6040516104079190614a62565b60405180910390f35b34801561041c57600080fd5b50610425610ebb565b6040516104329190614a62565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190613d31565b610ec1565b005b34801561047057600080fd5b50610479610f21565b6040516104869190614a62565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190613e47565b610f27565b6040516104c39190614a62565b60405180910390f35b6104d4610fcc565b005b6104f060048036038101906104eb9190613e47565b6110c1565b005b3480156104fe57600080fd5b5061051960048036038101906105149190613d31565b611613565b005b34801561052757600080fd5b50610542600480360381019061053d9190613cc4565b611633565b60405161054f91906146a3565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a9190614021565b6116e1565b005b34801561058d57600080fd5b506105a860048036038101906105a39190614021565b611767565b6040516105b59190614a62565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e09190613e87565b6117d8565b005b3480156105f357600080fd5b506105fc61190f565b60405161060991906146c5565b60405180910390f35b34801561061e57600080fd5b50610627611922565b005b34801561063557600080fd5b50610650600480360381019061064b9190613fd8565b6119eb565b005b34801561065e57600080fd5b50610667611a81565b60405161067491906146c5565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190614021565b611a94565b6040516106b1919061463c565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190613f08565b611b46565b005b3480156106ef57600080fd5b506106f8611c5d565b60405161070591906146e0565b60405180910390f35b34801561071a57600080fd5b5061073560048036038101906107309190614021565b611ceb565b005b34801561074357600080fd5b5061075e60048036038101906107599190613cc4565b611d71565b60405161076b9190614a62565b60405180910390f35b34801561078057600080fd5b50610789611e29565b005b34801561079757600080fd5b506107a0611eb1565b6040516107ad9190614a62565b60405180910390f35b3480156107c257600080fd5b506107cb611eb7565b6040516107d89190614a62565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190614021565b611ebd565b005b34801561081657600080fd5b5061081f611f43565b60405161082c919061463c565b60405180910390f35b34801561084157600080fd5b5061085c60048036038101906108579190614021565b611f6d565b005b34801561086a57600080fd5b50610873611ff3565b60405161088091906146e0565b60405180910390f35b34801561089557600080fd5b5061089e612085565b6040516108ab9190614a62565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190614021565b61208b565b005b3480156108e957600080fd5b5061090460048036038101906108ff9190613e07565b61215b565b005b34801561091257600080fd5b5061092d60048036038101906109289190613f08565b612171565b005b34801561093b57600080fd5b5061095660048036038101906109519190613d84565b612288565b005b34801561096457600080fd5b5061096d6122ea565b60405161097a91906146e0565b60405180910390f35b34801561098f57600080fd5b506109aa60048036038101906109a59190614021565b612378565b6040516109b791906146e0565b60405180910390f35b3480156109cc57600080fd5b506109d56124cd565b6040516109e29190614a62565b60405180910390f35b3480156109f757600080fd5b50610a126004803603810190610a0d9190613cc4565b6124d3565b604051610a1f91906146c5565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190613fd8565b6124f3565b005b348015610a5d57600080fd5b50610a66612589565b604051610a739190614a62565b60405180910390f35b348015610a8857600080fd5b50610aa36004803603810190610a9e9190613cf1565b612591565b604051610ab091906146c5565b60405180910390f35b348015610ac557600080fd5b50610ae06004803603810190610adb9190613cc4565b612625565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b555750610b548261271d565b5b9050919050565b610b646127ff565b73ffffffffffffffffffffffffffffffffffffffff16610b82611f43565b73ffffffffffffffffffffffffffffffffffffffff1614610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf90614902565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b606060008054610c0490614d97565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3090614d97565b8015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b5050505050905090565b6000610c9282612807565b610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc8906148e2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d1782611a94565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90614962565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610da76127ff565b73ffffffffffffffffffffffffffffffffffffffff161480610dd65750610dd581610dd06127ff565b612591565b5b610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90614842565b60405180910390fd5b610e1f8383612873565b505050565b60115481565b6000600880549050905090565b6000610e416127ff565b73ffffffffffffffffffffffffffffffffffffffff16610e5f611f43565b73ffffffffffffffffffffffffffffffffffffffff1614610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90614902565b60405180910390fd5b47905090565b60145481565b610ed2610ecc6127ff565b8261292c565b610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f08906149e2565b60405180910390fd5b610f1c838383612a0a565b505050565b60125481565b6000610f3283611d71565b8210610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90614702565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610fd46127ff565b73ffffffffffffffffffffffffffffffffffffffff16610ff2611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614902565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161106e90614627565b60006040518083038185875af1925050503d80600081146110ab576040519150601f19603f3d011682016040523d82523d6000602084013e6110b0565b606091505b50509050806110be57600080fd5b50565b60006110cb610e2a565b9050601560009054906101000a900460ff161561111d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611114906149a2565b60405180910390fd5b60008211611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790614922565b60405180910390fd5b601354828261116f9190614bcc565b11156111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a7906147e2565b60405180910390fd5b6111b8611f43565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115d6574260165411156115545760011515601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146113b357601454821115611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890614982565b60405180910390fd5b600e54421161132657816012546112a89190614c53565b3410156112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190614a42565b60405180910390fd5b6000600190505b8281116113205761130d8482846113089190614bcc565b612c71565b808061131890614dfa565b9150506112f1565b506113ae565b816011546113349190614c53565b341015611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d906149c2565b60405180910390fd5b6000600190505b8281116113ac576113998482846113949190614bcc565b612c71565b80806113a490614dfa565b91505061137d565b505b61154f565b6014548211156113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90614982565b60405180910390fd5b600e5442116114625760018261140e9190614cad565b60125461141b9190614c53565b34101561145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490614822565b60405180910390fd5b6114bf565b60018261146f9190614cad565b60115461147c9190614c53565b3410156114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b5906149c2565b60405180910390fd5b5b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600190505b82811161154d5761153a8482846115359190614bcc565b612c71565b808061154590614dfa565b91505061151e565b505b6115d1565b601454821115611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090614982565b60405180910390fd5b6000600190505b8281116115cf576115bc8482846115b79190614bcc565b612c71565b80806115c790614dfa565b9150506115a0565b505b61160e565b6000600190505b82811161160c576115f98482846115f49190614bcc565b612c71565b808061160490614dfa565b9150506115dd565b505b505050565b61162e83838360405180602001604052806000815250612288565b505050565b6060600061164083611d71565b905060008167ffffffffffffffff81111561165e5761165d614f5f565b5b60405190808252806020026020018201604052801561168c5781602001602082028036833780820191505090505b50905060005b828110156116d6576116a48582610f27565b8282815181106116b7576116b6614f30565b5b60200260200101818152505080806116ce90614dfa565b915050611692565b508092505050919050565b6116e96127ff565b73ffffffffffffffffffffffffffffffffffffffff16611707611f43565b73ffffffffffffffffffffffffffffffffffffffff161461175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490614902565b60405180910390fd5b8060118190555050565b6000611771610e2a565b82106117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990614a02565b60405180910390fd5b600882815481106117c6576117c5614f30565b5b90600052602060002001549050919050565b6117e06127ff565b73ffffffffffffffffffffffffffffffffffffffff166117fe611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90614902565b60405180910390fd5b81819050848490501461189c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611893906148a2565b60405180910390fd5b60005b84849050811015611908576118f5338686848181106118c1576118c0614f30565b5b90506020020160208101906118d69190613cc4565b8585858181106118e9576118e8614f30565b5b90506020020135611613565b808061190090614dfa565b91505061189f565b5050505050565b600c60009054906101000a900460ff1681565b61192a6127ff565b73ffffffffffffffffffffffffffffffffffffffff16611948611f43565b73ffffffffffffffffffffffffffffffffffffffff161461199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199590614902565b60405180910390fd5b600e5442116119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d990614a22565b60405180910390fd5b42600e81905550565b6119f36127ff565b73ffffffffffffffffffffffffffffffffffffffff16611a11611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5e90614902565b60405180910390fd5b80600f9080519060200190611a7d92919061398e565b5050565b601560009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490614882565b60405180910390fd5b80915050919050565b611b4e6127ff565b73ffffffffffffffffffffffffffffffffffffffff16611b6c611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb990614902565b60405180910390fd5b60008151905060005b81811015611c5857600160176000858481518110611bec57611beb614f30565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c5090614dfa565b915050611bcb565b505050565b600f8054611c6a90614d97565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9690614d97565b8015611ce35780601f10611cb857610100808354040283529160200191611ce3565b820191906000526020600020905b815481529060010190602001808311611cc657829003601f168201915b505050505081565b611cf36127ff565b73ffffffffffffffffffffffffffffffffffffffff16611d11611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5e90614902565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd990614862565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e316127ff565b73ffffffffffffffffffffffffffffffffffffffff16611e4f611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9c90614902565b60405180910390fd5b611eaf6000612c8f565b565b600e5481565b60165481565b611ec56127ff565b73ffffffffffffffffffffffffffffffffffffffff16611ee3611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3090614902565b60405180910390fd5b8060148190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f756127ff565b73ffffffffffffffffffffffffffffffffffffffff16611f93611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe090614902565b60405180910390fd5b8060128190555050565b60606001805461200290614d97565b80601f016020809104026020016040519081016040528092919081815260200182805461202e90614d97565b801561207b5780601f106120505761010080835404028352916020019161207b565b820191906000526020600020905b81548152906001019060200180831161205e57829003601f168201915b5050505050905090565b600d5481565b6120936127ff565b73ffffffffffffffffffffffffffffffffffffffff166120b1611f43565b73ffffffffffffffffffffffffffffffffffffffff1614612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe90614902565b60405180910390fd5b600e54421161213757620151808161211f9190614c53565b600e5461212c9190614bcc565b600e81905550612158565b62015180816121469190614c53565b426121519190614bcc565b600e819055505b50565b61216d6121666127ff565b8383612d55565b5050565b6121796127ff565b73ffffffffffffffffffffffffffffffffffffffff16612197611f43565b73ffffffffffffffffffffffffffffffffffffffff16146121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490614902565b60405180910390fd5b60008151905060005b818110156122835760006017600085848151811061221757612216614f30565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061227b90614dfa565b9150506121f6565b505050565b6122996122936127ff565b8361292c565b6122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf906149e2565b60405180910390fd5b6122e484848484612ec2565b50505050565b601080546122f790614d97565b80601f016020809104026020016040519081016040528092919081815260200182805461232390614d97565b80156123705780601f1061234557610100808354040283529160200191612370565b820191906000526020600020905b81548152906001019060200180831161235357829003601f168201915b505050505081565b60604262093a80600d5461238c9190614bcc565b101561243a5761239b82612807565b6123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d190614942565b60405180910390fd5b60006123e4612f1e565b905060008151116124045760405180602001604052806000815250612432565b8061240e84612fb0565b6010604051602001612422939291906145f6565b6040516020818303038152906040525b9150506124c8565b600b805461244790614d97565b80601f016020809104026020016040519081016040528092919081815260200182805461247390614d97565b80156124c05780601f10612495576101008083540402835291602001916124c0565b820191906000526020600020905b8154815290600101906020018083116124a357829003601f168201915b505050505090505b919050565b60135481565b60176020528060005260406000206000915054906101000a900460ff1681565b6124fb6127ff565b73ffffffffffffffffffffffffffffffffffffffff16612519611f43565b73ffffffffffffffffffffffffffffffffffffffff161461256f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256690614902565b60405180910390fd5b806010908051906020019061258592919061398e565b5050565b600042905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61262d6127ff565b73ffffffffffffffffffffffffffffffffffffffff1661264b611f43565b73ffffffffffffffffffffffffffffffffffffffff16146126a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269890614902565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270890614742565b60405180910390fd5b61271a81612c8f565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127e857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127f857506127f782613111565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128e683611a94565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061293782612807565b612976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296d90614802565b60405180910390fd5b600061298183611a94565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129f057508373ffffffffffffffffffffffffffffffffffffffff166129d884610c87565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a015750612a008185612591565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a2a82611a94565b73ffffffffffffffffffffffffffffffffffffffff1614612a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7790614762565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae7906147a2565b60405180910390fd5b612afb83838361317b565b612b06600082612873565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b569190614cad565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bad9190614bcc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c6c83838361328f565b505050565b612c8b828260405180602001604052806000815250613294565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbb906147c2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612eb591906146c5565b60405180910390a3505050565b612ecd848484612a0a565b612ed9848484846132ef565b612f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0f90614722565b60405180910390fd5b50505050565b6060600f8054612f2d90614d97565b80601f0160208091040260200160405190810160405280929190818152602001828054612f5990614d97565b8015612fa65780601f10612f7b57610100808354040283529160200191612fa6565b820191906000526020600020905b815481529060010190602001808311612f8957829003601f168201915b5050505050905090565b60606000821415612ff8576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061310c565b600082905060005b6000821461302a57808061301390614dfa565b915050600a826130239190614c22565b9150613000565b60008167ffffffffffffffff81111561304657613045614f5f565b5b6040519080825280601f01601f1916602001820160405280156130785781602001600182028036833780820191505090505b5090505b60008514613105576001826130919190614cad565b9150600a856130a09190614e43565b60306130ac9190614bcc565b60f81b8183815181106130c2576130c1614f30565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130fe9190614c22565b945061307c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613186838383613486565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131c9576131c48161348b565b613208565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146132075761320683826134d4565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561324b5761324681613641565b61328a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613289576132888282613712565b5b5b505050565b505050565b61329e8383613791565b6132ab60008484846132ef565b6132ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e190614722565b60405180910390fd5b505050565b60006133108473ffffffffffffffffffffffffffffffffffffffff1661396b565b15613479578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026133396127ff565b8786866040518563ffffffff1660e01b815260040161335b9493929190614657565b602060405180830381600087803b15801561337557600080fd5b505af19250505080156133a657506040513d601f19601f820116820180604052508101906133a39190613fab565b60015b613429573d80600081146133d6576040519150601f19603f3d011682016040523d82523d6000602084013e6133db565b606091505b50600081511415613421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341890614722565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061347e565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016134e184611d71565b6134eb9190614cad565b90506000600760008481526020019081526020016000205490508181146135d0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136559190614cad565b905060006009600084815260200190815260200160002054905060006008838154811061368557613684614f30565b5b9060005260206000200154905080600883815481106136a7576136a6614f30565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806136f6576136f5614f01565b5b6001900381819060005260206000200160009055905550505050565b600061371d83611d71565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f8906148c2565b60405180910390fd5b61380a81612807565b1561384a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384190614782565b60405180910390fd5b6138566000838361317b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138a69190614bcc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46139676000838361328f565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461399a90614d97565b90600052602060002090601f0160209004810192826139bc5760008555613a03565b82601f106139d557805160ff1916838001178555613a03565b82800160010185558215613a03579182015b82811115613a025782518255916020019190600101906139e7565b5b509050613a109190613a14565b5090565b5b80821115613a2d576000816000905550600101613a15565b5090565b6000613a44613a3f84614aa2565b614a7d565b90508083825260208201905082856020860282011115613a6757613a66614f98565b5b60005b85811015613a975781613a7d8882613b25565b845260208401935060208301925050600181019050613a6a565b5050509392505050565b6000613ab4613aaf84614ace565b614a7d565b905082815260208101848484011115613ad057613acf614f9d565b5b613adb848285614d55565b509392505050565b6000613af6613af184614aff565b614a7d565b905082815260208101848484011115613b1257613b11614f9d565b5b613b1d848285614d55565b509392505050565b600081359050613b3481615699565b92915050565b60008083601f840112613b5057613b4f614f93565b5b8235905067ffffffffffffffff811115613b6d57613b6c614f8e565b5b602083019150836020820283011115613b8957613b88614f98565b5b9250929050565b600082601f830112613ba557613ba4614f93565b5b8135613bb5848260208601613a31565b91505092915050565b60008083601f840112613bd457613bd3614f93565b5b8235905067ffffffffffffffff811115613bf157613bf0614f8e565b5b602083019150836020820283011115613c0d57613c0c614f98565b5b9250929050565b600081359050613c23816156b0565b92915050565b600081359050613c38816156c7565b92915050565b600081519050613c4d816156c7565b92915050565b600082601f830112613c6857613c67614f93565b5b8135613c78848260208601613aa1565b91505092915050565b600082601f830112613c9657613c95614f93565b5b8135613ca6848260208601613ae3565b91505092915050565b600081359050613cbe816156de565b92915050565b600060208284031215613cda57613cd9614fa7565b5b6000613ce884828501613b25565b91505092915050565b60008060408385031215613d0857613d07614fa7565b5b6000613d1685828601613b25565b9250506020613d2785828601613b25565b9150509250929050565b600080600060608486031215613d4a57613d49614fa7565b5b6000613d5886828701613b25565b9350506020613d6986828701613b25565b9250506040613d7a86828701613caf565b9150509250925092565b60008060008060808587031215613d9e57613d9d614fa7565b5b6000613dac87828801613b25565b9450506020613dbd87828801613b25565b9350506040613dce87828801613caf565b925050606085013567ffffffffffffffff811115613def57613dee614fa2565b5b613dfb87828801613c53565b91505092959194509250565b60008060408385031215613e1e57613e1d614fa7565b5b6000613e2c85828601613b25565b9250506020613e3d85828601613c14565b9150509250929050565b60008060408385031215613e5e57613e5d614fa7565b5b6000613e6c85828601613b25565b9250506020613e7d85828601613caf565b9150509250929050565b60008060008060408587031215613ea157613ea0614fa7565b5b600085013567ffffffffffffffff811115613ebf57613ebe614fa2565b5b613ecb87828801613b3a565b9450945050602085013567ffffffffffffffff811115613eee57613eed614fa2565b5b613efa87828801613bbe565b925092505092959194509250565b600060208284031215613f1e57613f1d614fa7565b5b600082013567ffffffffffffffff811115613f3c57613f3b614fa2565b5b613f4884828501613b90565b91505092915050565b600060208284031215613f6757613f66614fa7565b5b6000613f7584828501613c14565b91505092915050565b600060208284031215613f9457613f93614fa7565b5b6000613fa284828501613c29565b91505092915050565b600060208284031215613fc157613fc0614fa7565b5b6000613fcf84828501613c3e565b91505092915050565b600060208284031215613fee57613fed614fa7565b5b600082013567ffffffffffffffff81111561400c5761400b614fa2565b5b61401884828501613c81565b91505092915050565b60006020828403121561403757614036614fa7565b5b600061404584828501613caf565b91505092915050565b600061405a83836145d8565b60208301905092915050565b61406f81614ce1565b82525050565b600061408082614b55565b61408a8185614b83565b935061409583614b30565b8060005b838110156140c65781516140ad888261404e565b97506140b883614b76565b925050600181019050614099565b5085935050505092915050565b6140dc81614cf3565b82525050565b60006140ed82614b60565b6140f78185614b94565b9350614107818560208601614d64565b61411081614fac565b840191505092915050565b600061412682614b6b565b6141308185614bb0565b9350614140818560208601614d64565b61414981614fac565b840191505092915050565b600061415f82614b6b565b6141698185614bc1565b9350614179818560208601614d64565b80840191505092915050565b6000815461419281614d97565b61419c8186614bc1565b945060018216600081146141b757600181146141c8576141fb565b60ff198316865281860193506141fb565b6141d185614b40565b60005b838110156141f3578154818901526001820191506020810190506141d4565b838801955050505b50505092915050565b6000614211602b83614bb0565b915061421c82614fbd565b604082019050919050565b6000614234603283614bb0565b915061423f8261500c565b604082019050919050565b6000614257602683614bb0565b91506142628261505b565b604082019050919050565b600061427a602583614bb0565b9150614285826150aa565b604082019050919050565b600061429d601c83614bb0565b91506142a8826150f9565b602082019050919050565b60006142c0602483614bb0565b91506142cb82615122565b604082019050919050565b60006142e3601983614bb0565b91506142ee82615171565b602082019050919050565b6000614306601683614bb0565b91506143118261519a565b602082019050919050565b6000614329602c83614bb0565b9150614334826151c3565b604082019050919050565b600061434c602183614bb0565b915061435782615212565b604082019050919050565b600061436f603883614bb0565b915061437a82615261565b604082019050919050565b6000614392602a83614bb0565b915061439d826152b0565b604082019050919050565b60006143b5602983614bb0565b91506143c0826152ff565b604082019050919050565b60006143d8602883614bb0565b91506143e38261534e565b604082019050919050565b60006143fb602083614bb0565b91506144068261539d565b602082019050919050565b600061441e602c83614bb0565b9150614429826153c6565b604082019050919050565b6000614441602083614bb0565b915061444c82615415565b602082019050919050565b6000614464601983614bb0565b915061446f8261543e565b602082019050919050565b6000614487602f83614bb0565b915061449282615467565b604082019050919050565b60006144aa602183614bb0565b91506144b5826154b6565b604082019050919050565b60006144cd601283614bb0565b91506144d882615505565b602082019050919050565b60006144f0601183614bb0565b91506144fb8261552e565b602082019050919050565b6000614513602583614bb0565b915061451e82615557565b604082019050919050565b6000614536600083614ba5565b9150614541826155a6565b600082019050919050565b6000614559603183614bb0565b9150614564826155a9565b604082019050919050565b600061457c602c83614bb0565b9150614587826155f8565b604082019050919050565b600061459f601883614bb0565b91506145aa82615647565b602082019050919050565b60006145c2600683614bb0565b91506145cd82615670565b602082019050919050565b6145e181614d4b565b82525050565b6145f081614d4b565b82525050565b60006146028286614154565b915061460e8285614154565b915061461a8284614185565b9150819050949350505050565b600061463282614529565b9150819050919050565b60006020820190506146516000830184614066565b92915050565b600060808201905061466c6000830187614066565b6146796020830186614066565b61468660408301856145e7565b818103606083015261469881846140e2565b905095945050505050565b600060208201905081810360008301526146bd8184614075565b905092915050565b60006020820190506146da60008301846140d3565b92915050565b600060208201905081810360008301526146fa818461411b565b905092915050565b6000602082019050818103600083015261471b81614204565b9050919050565b6000602082019050818103600083015261473b81614227565b9050919050565b6000602082019050818103600083015261475b8161424a565b9050919050565b6000602082019050818103600083015261477b8161426d565b9050919050565b6000602082019050818103600083015261479b81614290565b9050919050565b600060208201905081810360008301526147bb816142b3565b9050919050565b600060208201905081810360008301526147db816142d6565b9050919050565b600060208201905081810360008301526147fb816142f9565b9050919050565b6000602082019050818103600083015261481b8161431c565b9050919050565b6000602082019050818103600083015261483b8161433f565b9050919050565b6000602082019050818103600083015261485b81614362565b9050919050565b6000602082019050818103600083015261487b81614385565b9050919050565b6000602082019050818103600083015261489b816143a8565b9050919050565b600060208201905081810360008301526148bb816143cb565b9050919050565b600060208201905081810360008301526148db816143ee565b9050919050565b600060208201905081810360008301526148fb81614411565b9050919050565b6000602082019050818103600083015261491b81614434565b9050919050565b6000602082019050818103600083015261493b81614457565b9050919050565b6000602082019050818103600083015261495b8161447a565b9050919050565b6000602082019050818103600083015261497b8161449d565b9050919050565b6000602082019050818103600083015261499b816144c0565b9050919050565b600060208201905081810360008301526149bb816144e3565b9050919050565b600060208201905081810360008301526149db81614506565b9050919050565b600060208201905081810360008301526149fb8161454c565b9050919050565b60006020820190508181036000830152614a1b8161456f565b9050919050565b60006020820190508181036000830152614a3b81614592565b9050919050565b60006020820190508181036000830152614a5b816145b5565b9050919050565b6000602082019050614a7760008301846145e7565b92915050565b6000614a87614a98565b9050614a938282614dc9565b919050565b6000604051905090565b600067ffffffffffffffff821115614abd57614abc614f5f565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ae957614ae8614f5f565b5b614af282614fac565b9050602081019050919050565b600067ffffffffffffffff821115614b1a57614b19614f5f565b5b614b2382614fac565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614bd782614d4b565b9150614be283614d4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c1757614c16614e74565b5b828201905092915050565b6000614c2d82614d4b565b9150614c3883614d4b565b925082614c4857614c47614ea3565b5b828204905092915050565b6000614c5e82614d4b565b9150614c6983614d4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ca257614ca1614e74565b5b828202905092915050565b6000614cb882614d4b565b9150614cc383614d4b565b925082821015614cd657614cd5614e74565b5b828203905092915050565b6000614cec82614d2b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d82578082015181840152602081019050614d67565b83811115614d91576000848401525b50505050565b60006002820490506001821680614daf57607f821691505b60208210811415614dc357614dc2614ed2565b5b50919050565b614dd282614fac565b810181811067ffffffffffffffff82111715614df157614df0614f5f565b5b80604052505050565b6000614e0582614d4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e3857614e37614e74565b5b600182019050919050565b6000614e4e82614d4b565b9150614e5983614d4b565b925082614e6957614e68614ea3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f616c6c204e66747320686173206265656e20736f6c6400000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f706179696e67206c657373207468616e207468652050726553616c6520636f7360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f72656365697665727320616e6420696473206861766520646966666572656e7460008201527f206c656e67746873000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f796f75206469646e27742061646420616e79206e756d62657200000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f796f752063616e74206d696e74206d6f72650000000000000000000000000000600082015250565b7f6d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b7f706179696e67206c657373207468616e20746865207075626c69632073616c6560008201527f20636f7374000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f70726573616c6520697320616c726561647920656e6465640000000000000000600082015250565b7f68656c6c6f360000000000000000000000000000000000000000000000000000600082015250565b6156a281614ce1565b81146156ad57600080fd5b50565b6156b981614cf3565b81146156c457600080fd5b50565b6156d081614cff565b81146156db57600080fd5b50565b6156e781614d4b565b81146156f257600080fd5b5056fea2646970667358221220c6a2965d20b68338539bf2994d9011f8e9dd6249d489f229cc39efc1bd0ccd5164736f6c63430008070033697066733a2f2f516d5566557a70356331657070557a6d4d37596579377233774e7561787767776b42416732786e4a7542756276342f756e72657665616c2e6a736f6e00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000001157415443484d414e2047414e47204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003574d4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5869774e4536557972316a4b73466b4461627959424d7369655a4e5a4163784344446e75397950754b6472732f00000000000000000000

Deployed Bytecode

0x6080604052600436106102935760003560e01c8063686b28121161015a578063a21b31f3116100c1578063d5abeb011161007a578063d5abeb01146109c0578063d936547e146109eb578063da3ef23f14610a28578063e2edf73114610a51578063e985e9c514610a7c578063f2fde38b14610ab957610293565b8063a21b31f3146108b4578063a22cb465146108dd578063b2e1311114610906578063b88d4fde1461092f578063c668286214610958578063c87b56dd1461098357610293565b80637cbeed37116101135780637cbeed37146107b65780637f00c7a6146107e15780638da5cb5b1461080a5780638fdcf9421461083557806395d89b411461085e5780639cb464271461088957610293565b8063686b2812146106ba5780636c0360eb146106e35780636f8b44b01461070e57806370a0823114610737578063715018a6146107745780637b636ca41461078b57610293565b80633ccfd60b116101fe57806351524e5b116101b757806351524e5b146105be57806354214f69146105e75780635505017e1461061257806355f804b3146106295780635c975abb146106525780636352211e1461067d57610293565b80633ccfd60b146104cc57806340c10f19146104d657806342842e0e146104f2578063438b63001461051b57806344a0d68a146105585780634f6ccce71461058157610293565b806318160ddd1161025057806318160ddd146103ba5780631b70cd38146103e5578063239c70ae1461041057806323b872dd1461043b5780632a23d07d146104645780632f745c591461048f57610293565b806301ffc9a71461029857806302329a29146102d557806306fdde03146102fe578063081812fc14610329578063095ea7b31461036657806313faede61461038f575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613f7e565b610ae2565b6040516102cc91906146c5565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190613f51565b610b5c565b005b34801561030a57600080fd5b50610313610bf5565b60405161032091906146e0565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190614021565b610c87565b60405161035d919061463c565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190613e47565b610d0c565b005b34801561039b57600080fd5b506103a4610e24565b6040516103b19190614a62565b60405180910390f35b3480156103c657600080fd5b506103cf610e2a565b6040516103dc9190614a62565b60405180910390f35b3480156103f157600080fd5b506103fa610e37565b6040516104079190614a62565b60405180910390f35b34801561041c57600080fd5b50610425610ebb565b6040516104329190614a62565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190613d31565b610ec1565b005b34801561047057600080fd5b50610479610f21565b6040516104869190614a62565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190613e47565b610f27565b6040516104c39190614a62565b60405180910390f35b6104d4610fcc565b005b6104f060048036038101906104eb9190613e47565b6110c1565b005b3480156104fe57600080fd5b5061051960048036038101906105149190613d31565b611613565b005b34801561052757600080fd5b50610542600480360381019061053d9190613cc4565b611633565b60405161054f91906146a3565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a9190614021565b6116e1565b005b34801561058d57600080fd5b506105a860048036038101906105a39190614021565b611767565b6040516105b59190614a62565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e09190613e87565b6117d8565b005b3480156105f357600080fd5b506105fc61190f565b60405161060991906146c5565b60405180910390f35b34801561061e57600080fd5b50610627611922565b005b34801561063557600080fd5b50610650600480360381019061064b9190613fd8565b6119eb565b005b34801561065e57600080fd5b50610667611a81565b60405161067491906146c5565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190614021565b611a94565b6040516106b1919061463c565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190613f08565b611b46565b005b3480156106ef57600080fd5b506106f8611c5d565b60405161070591906146e0565b60405180910390f35b34801561071a57600080fd5b5061073560048036038101906107309190614021565b611ceb565b005b34801561074357600080fd5b5061075e60048036038101906107599190613cc4565b611d71565b60405161076b9190614a62565b60405180910390f35b34801561078057600080fd5b50610789611e29565b005b34801561079757600080fd5b506107a0611eb1565b6040516107ad9190614a62565b60405180910390f35b3480156107c257600080fd5b506107cb611eb7565b6040516107d89190614a62565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190614021565b611ebd565b005b34801561081657600080fd5b5061081f611f43565b60405161082c919061463c565b60405180910390f35b34801561084157600080fd5b5061085c60048036038101906108579190614021565b611f6d565b005b34801561086a57600080fd5b50610873611ff3565b60405161088091906146e0565b60405180910390f35b34801561089557600080fd5b5061089e612085565b6040516108ab9190614a62565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190614021565b61208b565b005b3480156108e957600080fd5b5061090460048036038101906108ff9190613e07565b61215b565b005b34801561091257600080fd5b5061092d60048036038101906109289190613f08565b612171565b005b34801561093b57600080fd5b5061095660048036038101906109519190613d84565b612288565b005b34801561096457600080fd5b5061096d6122ea565b60405161097a91906146e0565b60405180910390f35b34801561098f57600080fd5b506109aa60048036038101906109a59190614021565b612378565b6040516109b791906146e0565b60405180910390f35b3480156109cc57600080fd5b506109d56124cd565b6040516109e29190614a62565b60405180910390f35b3480156109f757600080fd5b50610a126004803603810190610a0d9190613cc4565b6124d3565b604051610a1f91906146c5565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190613fd8565b6124f3565b005b348015610a5d57600080fd5b50610a66612589565b604051610a739190614a62565b60405180910390f35b348015610a8857600080fd5b50610aa36004803603810190610a9e9190613cf1565b612591565b604051610ab091906146c5565b60405180910390f35b348015610ac557600080fd5b50610ae06004803603810190610adb9190613cc4565b612625565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b555750610b548261271d565b5b9050919050565b610b646127ff565b73ffffffffffffffffffffffffffffffffffffffff16610b82611f43565b73ffffffffffffffffffffffffffffffffffffffff1614610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf90614902565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b606060008054610c0490614d97565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3090614d97565b8015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b5050505050905090565b6000610c9282612807565b610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc8906148e2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d1782611a94565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90614962565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610da76127ff565b73ffffffffffffffffffffffffffffffffffffffff161480610dd65750610dd581610dd06127ff565b612591565b5b610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90614842565b60405180910390fd5b610e1f8383612873565b505050565b60115481565b6000600880549050905090565b6000610e416127ff565b73ffffffffffffffffffffffffffffffffffffffff16610e5f611f43565b73ffffffffffffffffffffffffffffffffffffffff1614610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90614902565b60405180910390fd5b47905090565b60145481565b610ed2610ecc6127ff565b8261292c565b610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f08906149e2565b60405180910390fd5b610f1c838383612a0a565b505050565b60125481565b6000610f3283611d71565b8210610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90614702565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610fd46127ff565b73ffffffffffffffffffffffffffffffffffffffff16610ff2611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614902565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161106e90614627565b60006040518083038185875af1925050503d80600081146110ab576040519150601f19603f3d011682016040523d82523d6000602084013e6110b0565b606091505b50509050806110be57600080fd5b50565b60006110cb610e2a565b9050601560009054906101000a900460ff161561111d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611114906149a2565b60405180910390fd5b60008211611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790614922565b60405180910390fd5b601354828261116f9190614bcc565b11156111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a7906147e2565b60405180910390fd5b6111b8611f43565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115d6574260165411156115545760011515601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146113b357601454821115611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890614982565b60405180910390fd5b600e54421161132657816012546112a89190614c53565b3410156112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190614a42565b60405180910390fd5b6000600190505b8281116113205761130d8482846113089190614bcc565b612c71565b808061131890614dfa565b9150506112f1565b506113ae565b816011546113349190614c53565b341015611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d906149c2565b60405180910390fd5b6000600190505b8281116113ac576113998482846113949190614bcc565b612c71565b80806113a490614dfa565b91505061137d565b505b61154f565b6014548211156113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90614982565b60405180910390fd5b600e5442116114625760018261140e9190614cad565b60125461141b9190614c53565b34101561145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490614822565b60405180910390fd5b6114bf565b60018261146f9190614cad565b60115461147c9190614c53565b3410156114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b5906149c2565b60405180910390fd5b5b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600190505b82811161154d5761153a8482846115359190614bcc565b612c71565b808061154590614dfa565b91505061151e565b505b6115d1565b601454821115611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090614982565b60405180910390fd5b6000600190505b8281116115cf576115bc8482846115b79190614bcc565b612c71565b80806115c790614dfa565b9150506115a0565b505b61160e565b6000600190505b82811161160c576115f98482846115f49190614bcc565b612c71565b808061160490614dfa565b9150506115dd565b505b505050565b61162e83838360405180602001604052806000815250612288565b505050565b6060600061164083611d71565b905060008167ffffffffffffffff81111561165e5761165d614f5f565b5b60405190808252806020026020018201604052801561168c5781602001602082028036833780820191505090505b50905060005b828110156116d6576116a48582610f27565b8282815181106116b7576116b6614f30565b5b60200260200101818152505080806116ce90614dfa565b915050611692565b508092505050919050565b6116e96127ff565b73ffffffffffffffffffffffffffffffffffffffff16611707611f43565b73ffffffffffffffffffffffffffffffffffffffff161461175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490614902565b60405180910390fd5b8060118190555050565b6000611771610e2a565b82106117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990614a02565b60405180910390fd5b600882815481106117c6576117c5614f30565b5b90600052602060002001549050919050565b6117e06127ff565b73ffffffffffffffffffffffffffffffffffffffff166117fe611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90614902565b60405180910390fd5b81819050848490501461189c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611893906148a2565b60405180910390fd5b60005b84849050811015611908576118f5338686848181106118c1576118c0614f30565b5b90506020020160208101906118d69190613cc4565b8585858181106118e9576118e8614f30565b5b90506020020135611613565b808061190090614dfa565b91505061189f565b5050505050565b600c60009054906101000a900460ff1681565b61192a6127ff565b73ffffffffffffffffffffffffffffffffffffffff16611948611f43565b73ffffffffffffffffffffffffffffffffffffffff161461199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199590614902565b60405180910390fd5b600e5442116119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d990614a22565b60405180910390fd5b42600e81905550565b6119f36127ff565b73ffffffffffffffffffffffffffffffffffffffff16611a11611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5e90614902565b60405180910390fd5b80600f9080519060200190611a7d92919061398e565b5050565b601560009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490614882565b60405180910390fd5b80915050919050565b611b4e6127ff565b73ffffffffffffffffffffffffffffffffffffffff16611b6c611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb990614902565b60405180910390fd5b60008151905060005b81811015611c5857600160176000858481518110611bec57611beb614f30565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c5090614dfa565b915050611bcb565b505050565b600f8054611c6a90614d97565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9690614d97565b8015611ce35780601f10611cb857610100808354040283529160200191611ce3565b820191906000526020600020905b815481529060010190602001808311611cc657829003601f168201915b505050505081565b611cf36127ff565b73ffffffffffffffffffffffffffffffffffffffff16611d11611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5e90614902565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd990614862565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e316127ff565b73ffffffffffffffffffffffffffffffffffffffff16611e4f611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9c90614902565b60405180910390fd5b611eaf6000612c8f565b565b600e5481565b60165481565b611ec56127ff565b73ffffffffffffffffffffffffffffffffffffffff16611ee3611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3090614902565b60405180910390fd5b8060148190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f756127ff565b73ffffffffffffffffffffffffffffffffffffffff16611f93611f43565b73ffffffffffffffffffffffffffffffffffffffff1614611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe090614902565b60405180910390fd5b8060128190555050565b60606001805461200290614d97565b80601f016020809104026020016040519081016040528092919081815260200182805461202e90614d97565b801561207b5780601f106120505761010080835404028352916020019161207b565b820191906000526020600020905b81548152906001019060200180831161205e57829003601f168201915b5050505050905090565b600d5481565b6120936127ff565b73ffffffffffffffffffffffffffffffffffffffff166120b1611f43565b73ffffffffffffffffffffffffffffffffffffffff1614612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe90614902565b60405180910390fd5b600e54421161213757620151808161211f9190614c53565b600e5461212c9190614bcc565b600e81905550612158565b62015180816121469190614c53565b426121519190614bcc565b600e819055505b50565b61216d6121666127ff565b8383612d55565b5050565b6121796127ff565b73ffffffffffffffffffffffffffffffffffffffff16612197611f43565b73ffffffffffffffffffffffffffffffffffffffff16146121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490614902565b60405180910390fd5b60008151905060005b818110156122835760006017600085848151811061221757612216614f30565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061227b90614dfa565b9150506121f6565b505050565b6122996122936127ff565b8361292c565b6122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf906149e2565b60405180910390fd5b6122e484848484612ec2565b50505050565b601080546122f790614d97565b80601f016020809104026020016040519081016040528092919081815260200182805461232390614d97565b80156123705780601f1061234557610100808354040283529160200191612370565b820191906000526020600020905b81548152906001019060200180831161235357829003601f168201915b505050505081565b60604262093a80600d5461238c9190614bcc565b101561243a5761239b82612807565b6123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d190614942565b60405180910390fd5b60006123e4612f1e565b905060008151116124045760405180602001604052806000815250612432565b8061240e84612fb0565b6010604051602001612422939291906145f6565b6040516020818303038152906040525b9150506124c8565b600b805461244790614d97565b80601f016020809104026020016040519081016040528092919081815260200182805461247390614d97565b80156124c05780601f10612495576101008083540402835291602001916124c0565b820191906000526020600020905b8154815290600101906020018083116124a357829003601f168201915b505050505090505b919050565b60135481565b60176020528060005260406000206000915054906101000a900460ff1681565b6124fb6127ff565b73ffffffffffffffffffffffffffffffffffffffff16612519611f43565b73ffffffffffffffffffffffffffffffffffffffff161461256f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256690614902565b60405180910390fd5b806010908051906020019061258592919061398e565b5050565b600042905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61262d6127ff565b73ffffffffffffffffffffffffffffffffffffffff1661264b611f43565b73ffffffffffffffffffffffffffffffffffffffff16146126a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269890614902565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270890614742565b60405180910390fd5b61271a81612c8f565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127e857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127f857506127f782613111565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128e683611a94565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061293782612807565b612976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296d90614802565b60405180910390fd5b600061298183611a94565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129f057508373ffffffffffffffffffffffffffffffffffffffff166129d884610c87565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a015750612a008185612591565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a2a82611a94565b73ffffffffffffffffffffffffffffffffffffffff1614612a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7790614762565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae7906147a2565b60405180910390fd5b612afb83838361317b565b612b06600082612873565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b569190614cad565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bad9190614bcc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c6c83838361328f565b505050565b612c8b828260405180602001604052806000815250613294565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbb906147c2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612eb591906146c5565b60405180910390a3505050565b612ecd848484612a0a565b612ed9848484846132ef565b612f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0f90614722565b60405180910390fd5b50505050565b6060600f8054612f2d90614d97565b80601f0160208091040260200160405190810160405280929190818152602001828054612f5990614d97565b8015612fa65780601f10612f7b57610100808354040283529160200191612fa6565b820191906000526020600020905b815481529060010190602001808311612f8957829003601f168201915b5050505050905090565b60606000821415612ff8576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061310c565b600082905060005b6000821461302a57808061301390614dfa565b915050600a826130239190614c22565b9150613000565b60008167ffffffffffffffff81111561304657613045614f5f565b5b6040519080825280601f01601f1916602001820160405280156130785781602001600182028036833780820191505090505b5090505b60008514613105576001826130919190614cad565b9150600a856130a09190614e43565b60306130ac9190614bcc565b60f81b8183815181106130c2576130c1614f30565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130fe9190614c22565b945061307c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613186838383613486565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131c9576131c48161348b565b613208565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146132075761320683826134d4565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561324b5761324681613641565b61328a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613289576132888282613712565b5b5b505050565b505050565b61329e8383613791565b6132ab60008484846132ef565b6132ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e190614722565b60405180910390fd5b505050565b60006133108473ffffffffffffffffffffffffffffffffffffffff1661396b565b15613479578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026133396127ff565b8786866040518563ffffffff1660e01b815260040161335b9493929190614657565b602060405180830381600087803b15801561337557600080fd5b505af19250505080156133a657506040513d601f19601f820116820180604052508101906133a39190613fab565b60015b613429573d80600081146133d6576040519150601f19603f3d011682016040523d82523d6000602084013e6133db565b606091505b50600081511415613421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341890614722565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061347e565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016134e184611d71565b6134eb9190614cad565b90506000600760008481526020019081526020016000205490508181146135d0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136559190614cad565b905060006009600084815260200190815260200160002054905060006008838154811061368557613684614f30565b5b9060005260206000200154905080600883815481106136a7576136a6614f30565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806136f6576136f5614f01565b5b6001900381819060005260206000200160009055905550505050565b600061371d83611d71565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f8906148c2565b60405180910390fd5b61380a81612807565b1561384a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384190614782565b60405180910390fd5b6138566000838361317b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138a69190614bcc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46139676000838361328f565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461399a90614d97565b90600052602060002090601f0160209004810192826139bc5760008555613a03565b82601f106139d557805160ff1916838001178555613a03565b82800160010185558215613a03579182015b82811115613a025782518255916020019190600101906139e7565b5b509050613a109190613a14565b5090565b5b80821115613a2d576000816000905550600101613a15565b5090565b6000613a44613a3f84614aa2565b614a7d565b90508083825260208201905082856020860282011115613a6757613a66614f98565b5b60005b85811015613a975781613a7d8882613b25565b845260208401935060208301925050600181019050613a6a565b5050509392505050565b6000613ab4613aaf84614ace565b614a7d565b905082815260208101848484011115613ad057613acf614f9d565b5b613adb848285614d55565b509392505050565b6000613af6613af184614aff565b614a7d565b905082815260208101848484011115613b1257613b11614f9d565b5b613b1d848285614d55565b509392505050565b600081359050613b3481615699565b92915050565b60008083601f840112613b5057613b4f614f93565b5b8235905067ffffffffffffffff811115613b6d57613b6c614f8e565b5b602083019150836020820283011115613b8957613b88614f98565b5b9250929050565b600082601f830112613ba557613ba4614f93565b5b8135613bb5848260208601613a31565b91505092915050565b60008083601f840112613bd457613bd3614f93565b5b8235905067ffffffffffffffff811115613bf157613bf0614f8e565b5b602083019150836020820283011115613c0d57613c0c614f98565b5b9250929050565b600081359050613c23816156b0565b92915050565b600081359050613c38816156c7565b92915050565b600081519050613c4d816156c7565b92915050565b600082601f830112613c6857613c67614f93565b5b8135613c78848260208601613aa1565b91505092915050565b600082601f830112613c9657613c95614f93565b5b8135613ca6848260208601613ae3565b91505092915050565b600081359050613cbe816156de565b92915050565b600060208284031215613cda57613cd9614fa7565b5b6000613ce884828501613b25565b91505092915050565b60008060408385031215613d0857613d07614fa7565b5b6000613d1685828601613b25565b9250506020613d2785828601613b25565b9150509250929050565b600080600060608486031215613d4a57613d49614fa7565b5b6000613d5886828701613b25565b9350506020613d6986828701613b25565b9250506040613d7a86828701613caf565b9150509250925092565b60008060008060808587031215613d9e57613d9d614fa7565b5b6000613dac87828801613b25565b9450506020613dbd87828801613b25565b9350506040613dce87828801613caf565b925050606085013567ffffffffffffffff811115613def57613dee614fa2565b5b613dfb87828801613c53565b91505092959194509250565b60008060408385031215613e1e57613e1d614fa7565b5b6000613e2c85828601613b25565b9250506020613e3d85828601613c14565b9150509250929050565b60008060408385031215613e5e57613e5d614fa7565b5b6000613e6c85828601613b25565b9250506020613e7d85828601613caf565b9150509250929050565b60008060008060408587031215613ea157613ea0614fa7565b5b600085013567ffffffffffffffff811115613ebf57613ebe614fa2565b5b613ecb87828801613b3a565b9450945050602085013567ffffffffffffffff811115613eee57613eed614fa2565b5b613efa87828801613bbe565b925092505092959194509250565b600060208284031215613f1e57613f1d614fa7565b5b600082013567ffffffffffffffff811115613f3c57613f3b614fa2565b5b613f4884828501613b90565b91505092915050565b600060208284031215613f6757613f66614fa7565b5b6000613f7584828501613c14565b91505092915050565b600060208284031215613f9457613f93614fa7565b5b6000613fa284828501613c29565b91505092915050565b600060208284031215613fc157613fc0614fa7565b5b6000613fcf84828501613c3e565b91505092915050565b600060208284031215613fee57613fed614fa7565b5b600082013567ffffffffffffffff81111561400c5761400b614fa2565b5b61401884828501613c81565b91505092915050565b60006020828403121561403757614036614fa7565b5b600061404584828501613caf565b91505092915050565b600061405a83836145d8565b60208301905092915050565b61406f81614ce1565b82525050565b600061408082614b55565b61408a8185614b83565b935061409583614b30565b8060005b838110156140c65781516140ad888261404e565b97506140b883614b76565b925050600181019050614099565b5085935050505092915050565b6140dc81614cf3565b82525050565b60006140ed82614b60565b6140f78185614b94565b9350614107818560208601614d64565b61411081614fac565b840191505092915050565b600061412682614b6b565b6141308185614bb0565b9350614140818560208601614d64565b61414981614fac565b840191505092915050565b600061415f82614b6b565b6141698185614bc1565b9350614179818560208601614d64565b80840191505092915050565b6000815461419281614d97565b61419c8186614bc1565b945060018216600081146141b757600181146141c8576141fb565b60ff198316865281860193506141fb565b6141d185614b40565b60005b838110156141f3578154818901526001820191506020810190506141d4565b838801955050505b50505092915050565b6000614211602b83614bb0565b915061421c82614fbd565b604082019050919050565b6000614234603283614bb0565b915061423f8261500c565b604082019050919050565b6000614257602683614bb0565b91506142628261505b565b604082019050919050565b600061427a602583614bb0565b9150614285826150aa565b604082019050919050565b600061429d601c83614bb0565b91506142a8826150f9565b602082019050919050565b60006142c0602483614bb0565b91506142cb82615122565b604082019050919050565b60006142e3601983614bb0565b91506142ee82615171565b602082019050919050565b6000614306601683614bb0565b91506143118261519a565b602082019050919050565b6000614329602c83614bb0565b9150614334826151c3565b604082019050919050565b600061434c602183614bb0565b915061435782615212565b604082019050919050565b600061436f603883614bb0565b915061437a82615261565b604082019050919050565b6000614392602a83614bb0565b915061439d826152b0565b604082019050919050565b60006143b5602983614bb0565b91506143c0826152ff565b604082019050919050565b60006143d8602883614bb0565b91506143e38261534e565b604082019050919050565b60006143fb602083614bb0565b91506144068261539d565b602082019050919050565b600061441e602c83614bb0565b9150614429826153c6565b604082019050919050565b6000614441602083614bb0565b915061444c82615415565b602082019050919050565b6000614464601983614bb0565b915061446f8261543e565b602082019050919050565b6000614487602f83614bb0565b915061449282615467565b604082019050919050565b60006144aa602183614bb0565b91506144b5826154b6565b604082019050919050565b60006144cd601283614bb0565b91506144d882615505565b602082019050919050565b60006144f0601183614bb0565b91506144fb8261552e565b602082019050919050565b6000614513602583614bb0565b915061451e82615557565b604082019050919050565b6000614536600083614ba5565b9150614541826155a6565b600082019050919050565b6000614559603183614bb0565b9150614564826155a9565b604082019050919050565b600061457c602c83614bb0565b9150614587826155f8565b604082019050919050565b600061459f601883614bb0565b91506145aa82615647565b602082019050919050565b60006145c2600683614bb0565b91506145cd82615670565b602082019050919050565b6145e181614d4b565b82525050565b6145f081614d4b565b82525050565b60006146028286614154565b915061460e8285614154565b915061461a8284614185565b9150819050949350505050565b600061463282614529565b9150819050919050565b60006020820190506146516000830184614066565b92915050565b600060808201905061466c6000830187614066565b6146796020830186614066565b61468660408301856145e7565b818103606083015261469881846140e2565b905095945050505050565b600060208201905081810360008301526146bd8184614075565b905092915050565b60006020820190506146da60008301846140d3565b92915050565b600060208201905081810360008301526146fa818461411b565b905092915050565b6000602082019050818103600083015261471b81614204565b9050919050565b6000602082019050818103600083015261473b81614227565b9050919050565b6000602082019050818103600083015261475b8161424a565b9050919050565b6000602082019050818103600083015261477b8161426d565b9050919050565b6000602082019050818103600083015261479b81614290565b9050919050565b600060208201905081810360008301526147bb816142b3565b9050919050565b600060208201905081810360008301526147db816142d6565b9050919050565b600060208201905081810360008301526147fb816142f9565b9050919050565b6000602082019050818103600083015261481b8161431c565b9050919050565b6000602082019050818103600083015261483b8161433f565b9050919050565b6000602082019050818103600083015261485b81614362565b9050919050565b6000602082019050818103600083015261487b81614385565b9050919050565b6000602082019050818103600083015261489b816143a8565b9050919050565b600060208201905081810360008301526148bb816143cb565b9050919050565b600060208201905081810360008301526148db816143ee565b9050919050565b600060208201905081810360008301526148fb81614411565b9050919050565b6000602082019050818103600083015261491b81614434565b9050919050565b6000602082019050818103600083015261493b81614457565b9050919050565b6000602082019050818103600083015261495b8161447a565b9050919050565b6000602082019050818103600083015261497b8161449d565b9050919050565b6000602082019050818103600083015261499b816144c0565b9050919050565b600060208201905081810360008301526149bb816144e3565b9050919050565b600060208201905081810360008301526149db81614506565b9050919050565b600060208201905081810360008301526149fb8161454c565b9050919050565b60006020820190508181036000830152614a1b8161456f565b9050919050565b60006020820190508181036000830152614a3b81614592565b9050919050565b60006020820190508181036000830152614a5b816145b5565b9050919050565b6000602082019050614a7760008301846145e7565b92915050565b6000614a87614a98565b9050614a938282614dc9565b919050565b6000604051905090565b600067ffffffffffffffff821115614abd57614abc614f5f565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ae957614ae8614f5f565b5b614af282614fac565b9050602081019050919050565b600067ffffffffffffffff821115614b1a57614b19614f5f565b5b614b2382614fac565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614bd782614d4b565b9150614be283614d4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c1757614c16614e74565b5b828201905092915050565b6000614c2d82614d4b565b9150614c3883614d4b565b925082614c4857614c47614ea3565b5b828204905092915050565b6000614c5e82614d4b565b9150614c6983614d4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ca257614ca1614e74565b5b828202905092915050565b6000614cb882614d4b565b9150614cc383614d4b565b925082821015614cd657614cd5614e74565b5b828203905092915050565b6000614cec82614d2b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d82578082015181840152602081019050614d67565b83811115614d91576000848401525b50505050565b60006002820490506001821680614daf57607f821691505b60208210811415614dc357614dc2614ed2565b5b50919050565b614dd282614fac565b810181811067ffffffffffffffff82111715614df157614df0614f5f565b5b80604052505050565b6000614e0582614d4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e3857614e37614e74565b5b600182019050919050565b6000614e4e82614d4b565b9150614e5983614d4b565b925082614e6957614e68614ea3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f616c6c204e66747320686173206265656e20736f6c6400000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f706179696e67206c657373207468616e207468652050726553616c6520636f7360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f72656365697665727320616e6420696473206861766520646966666572656e7460008201527f206c656e67746873000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f796f75206469646e27742061646420616e79206e756d62657200000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f796f752063616e74206d696e74206d6f72650000000000000000000000000000600082015250565b7f6d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b7f706179696e67206c657373207468616e20746865207075626c69632073616c6560008201527f20636f7374000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f70726573616c6520697320616c726561647920656e6465640000000000000000600082015250565b7f68656c6c6f360000000000000000000000000000000000000000000000000000600082015250565b6156a281614ce1565b81146156ad57600080fd5b50565b6156b981614cf3565b81146156c457600080fd5b50565b6156d081614cff565b81146156db57600080fd5b50565b6156e781614d4b565b81146156f257600080fd5b5056fea2646970667358221220c6a2965d20b68338539bf2994d9011f8e9dd6249d489f229cc39efc1bd0ccd5164736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000001157415443484d414e2047414e47204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003574d4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5869774e4536557972316a4b73466b4461627959424d7369655a4e5a4163784344446e75397950754b6472732f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): WATCHMAN GANG NFT
Arg [1] : _symbol (string): WMG
Arg [2] : _initBaseURI (string): ipfs://QmXiwNE6Uyr1jKsFkDabyYBMsieZNZAcxCDDnu9yPuKdrs/
Arg [3] : _Presale_End_Time (uint256): 3
Arg [4] : _NFT_Free_Time (uint256): 9

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [6] : 57415443484d414e2047414e47204e4654000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 574d470000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [10] : 697066733a2f2f516d5869774e4536557972316a4b73466b4461627959424d73
Arg [11] : 69655a4e5a4163784344446e75397950754b6472732f00000000000000000000


Deployed Bytecode Sourcemap

45560:7742:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36782:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51509:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22530:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24089:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23612:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45957:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37422:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52579:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46081:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24839:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45997:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37090:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52699:192;;;:::i;:::-;;46878:2481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25249:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49367:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50763:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37612:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52995:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45754:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52393:178;;;;;;;;;;;;;:::i;:::-;;51232:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46121:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22224:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51602:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45875:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51112:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21954:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44639:103;;;;;;;;;;;;;:::i;:::-;;45840:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46154:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50976:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43988:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50862:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22699:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45803:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52088:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24382:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51842:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25505:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45913:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49768:790;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46043:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46188:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51350:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52899:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24608:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44897:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36782:224;36884:4;36923:35;36908:50;;;:11;:50;;;;:90;;;;36962:36;36986:11;36962:23;:36::i;:::-;36908:90;36901:97;;36782:224;;;:::o;51509:85::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51580:6:::1;51571;;:15;;;;;;;;;;;;;;;;;;51509:85:::0;:::o;22530:100::-;22584:13;22617:5;22610:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22530:100;:::o;24089:221::-;24165:7;24193:16;24201:7;24193;:16::i;:::-;24185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24278:15;:24;24294:7;24278:24;;;;;;;;;;;;;;;;;;;;;24271:31;;24089:221;;;:::o;23612:411::-;23693:13;23709:23;23724:7;23709:14;:23::i;:::-;23693:39;;23757:5;23751:11;;:2;:11;;;;23743:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23851:5;23835:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23860:37;23877:5;23884:12;:10;:12::i;:::-;23860:16;:37::i;:::-;23835:62;23813:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23994:21;24003:2;24007:7;23994:8;:21::i;:::-;23682:341;23612:411;;:::o;45957:33::-;;;;:::o;37422:113::-;37483:7;37510:10;:17;;;;37503:24;;37422:113;:::o;52579:112::-;52633:4;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52662:21:::1;52655:28;;52579:112:::0;:::o;46081:33::-;;;;:::o;24839:339::-;25034:41;25053:12;:10;:12::i;:::-;25067:7;25034:18;:41::i;:::-;25026:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25142:28;25152:4;25158:2;25162:7;25142:9;:28::i;:::-;24839:339;;;:::o;45997:39::-;;;;:::o;37090:256::-;37187:7;37223:23;37240:5;37223:16;:23::i;:::-;37215:5;:31;37207:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37312:12;:19;37325:5;37312:19;;;;;;;;;;;;;;;:26;37332:5;37312:26;;;;;;;;;;;;37305:33;;37090:256;;;;:::o;52699:192::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52756:12:::1;52782:10;52774:24;;52820:21;52774:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52755:101;;;52875:7;52867:16;;;::::0;::::1;;52744:147;52699:192::o:0;46878:2481::-;46954:14;46971:13;:11;:13::i;:::-;46954:30;;47004:6;;;;;;;;;;;47003:7;46995:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;47064:1;47050:11;:15;47042:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;47137:9;;47122:11;47113:6;:20;;;;:::i;:::-;:33;;47105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47203:7;:5;:7::i;:::-;47189:21;;:10;:21;;;47185:2165;;47248:15;47232:13;;:31;47229:1942;;;47318:4;47291:31;;:11;:23;47303:10;47291:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;47287:1608;;47370:13;;47355:11;:28;;47347:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47451:16;;47434:15;:33;47430:690;;47566:11;47552;;:25;;;;:::i;:::-;47539:9;:38;;47531:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;47619:9;47631:1;47619:13;;47614:128;47639:11;47634:1;:16;47614:128;;47688:26;47698:3;47712:1;47703:6;:10;;;;:::i;:::-;47688:9;:26::i;:::-;47652:3;;;;;:::i;:::-;;;;47614:128;;;;47430:690;;;47864:11;47857:4;;:18;;;;:::i;:::-;47844:9;:31;;47836:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;47948:9;47960:1;47948:13;;47943:128;47968:11;47963:1;:16;47943:128;;48017:26;48027:3;48041:1;48032:6;:10;;;;:::i;:::-;48017:9;:26::i;:::-;47981:3;;;;;:::i;:::-;;;;47943:128;;;;47430:690;47287:1608;;;48207:13;;48192:11;:28;;48184:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48288:16;;48271:15;:33;48267:419;;48416:1;48404:11;:13;;;;:::i;:::-;48389:11;;:29;;;;:::i;:::-;48376:9;:42;;48368:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;48267:419;;;48593:1;48581:11;:13;;;;:::i;:::-;48573:4;;:22;;;;:::i;:::-;48560:9;:35;;48552:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;48267:419;48732:5;48708:11;:23;48720:10;48708:23;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;48765:9;48777:1;48765:13;;48760:116;48785:11;48780:1;:16;48760:116;;48826:26;48836:3;48850:1;48841:6;:10;;;;:::i;:::-;48826:9;:26::i;:::-;48798:3;;;;;:::i;:::-;;;;48760:116;;;;47287:1608;47229:1942;;;48972:13;;48957:11;:28;;48949:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;49031:9;49043:1;49031:13;;49026:130;49051:11;49046:1;:16;49026:130;;49110:26;49120:3;49134:1;49125:6;:10;;;;:::i;:::-;49110:9;:26::i;:::-;49064:3;;;;;:::i;:::-;;;;49026:130;;;;47229:1942;47185:2165;;;49226:9;49238:1;49226:13;;49221:118;49246:11;49241:1;:16;49221:118;;49297:26;49307:3;49321:1;49312:6;:10;;;;:::i;:::-;49297:9;:26::i;:::-;49259:3;;;;;:::i;:::-;;;;49221:118;;;;47185:2165;46941:2418;46878:2481;;:::o;25249:185::-;25387:39;25404:4;25410:2;25414:7;25387:39;;;;;;;;;;;;:16;:39::i;:::-;25249:185;;;:::o;49367:390::-;49454:16;49488:23;49514:17;49524:6;49514:9;:17::i;:::-;49488:43;;49542:25;49584:15;49570:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49542:58;;49616:9;49611:113;49631:15;49627:1;:19;49611:113;;;49682:30;49702:6;49710:1;49682:19;:30::i;:::-;49668:8;49677:1;49668:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49648:3;;;;;:::i;:::-;;;;49611:113;;;;49741:8;49734:15;;;;49367:390;;;:::o;50763:91::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50838:8:::1;50831:4;:15;;;;50763:91:::0;:::o;37612:233::-;37687:7;37723:30;:28;:30::i;:::-;37715:5;:38;37707:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37820:10;37831:5;37820:17;;;;;;;;:::i;:::-;;;;;;;;;;37813:24;;37612:233;;;:::o;52995:302::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53116:3:::1;;:10;;53102:3;;:10;;:24;53094:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;53185:6;53181:109;53196:3;;:10;;53194:1;:12;53181:109;;;53236:42;53253:10;53264:3;;53268:1;53264:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;53271:3;;53275:1;53271:6;;;;;;;:::i;:::-;;;;;;;;53236:16;:42::i;:::-;53207:3;;;;;:::i;:::-;;;;53181:109;;;;52995:302:::0;;;;:::o;45754:28::-;;;;;;;;;;;;;:::o;52393:178::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52475:16:::1;;52459:15;:32;52451:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52547:15;52530:16;:32;;;;52393:178::o:0;51232:110::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51323:11:::1;51313:7;:21;;;;;;;;;;;;:::i;:::-;;51232:110:::0;:::o;46121:26::-;;;;;;;;;;;;;:::o;22224:239::-;22296:7;22316:13;22332:7;:16;22340:7;22332:16;;;;;;;;;;;;;;;;;;;;;22316:32;;22384:1;22367:19;;:5;:19;;;;22359:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22450:5;22443:12;;;22224:239;;;:::o;51602:234::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51688:16:::1;51707:6;:13;51688:32;;51736:9;51731:98;51755:11;51751:1;:15;51731:98;;;51813:4;51788:11;:22;51800:6;51807:1;51800:9;;;;;;;;:::i;:::-;;;;;;;;51788:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;51768:3;;;;;:::i;:::-;;;;51731:98;;;;51677:159;51602:234:::0;:::o;45875:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51112:112::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51203:13:::1;51191:9;:25;;;;51112:112:::0;:::o;21954:208::-;22026:7;22071:1;22054:19;;:5;:19;;;;22046:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22138:9;:16;22148:5;22138:16;;;;;;;;;;;;;;;;22131:23;;21954:208;;;:::o;44639:103::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44704:30:::1;44731:1;44704:18;:30::i;:::-;44639:103::o:0;45840:28::-;;;;:::o;46154:25::-;;;;:::o;50976:128::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51079:17:::1;51063:13;:33;;;;50976:128:::0;:::o;43988:87::-;44034:7;44061:6;;;;;;;;;;;44054:13;;43988:87;:::o;50862:106::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50952:8:::1;50938:11;:22;;;;50862:106:::0;:::o;22699:104::-;22755:13;22788:7;22781:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22699:104;:::o;45803:30::-;;;;:::o;52088:297::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52180:16:::1;;52163:15;:33;52159:217;;52266:6;52259:5;:13;;;;:::i;:::-;52239:16;;:34;;;;:::i;:::-;52222:16;:51;;;;52159:217;;;52357:6;52350:5;:13;;;;:::i;:::-;52331:15;:33;;;;:::i;:::-;52314:16;:50;;;;52159:217;52088:297:::0;:::o;24382:155::-;24477:52;24496:12;:10;:12::i;:::-;24510:8;24520;24477:18;:52::i;:::-;24382:155;;:::o;51842:238::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51931:16:::1;51950:6;:13;51931:32;;51979:9;51974:99;51998:11;51994:1;:15;51974:99;;;52056:5;52031:11;:22;52043:6;52050:1;52043:9;;;;;;;;:::i;:::-;;;;;;;;52031:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;52011:3;;;;;:::i;:::-;;;;51974:99;;;;51920:160;51842:238:::0;:::o;25505:328::-;25680:41;25699:12;:10;:12::i;:::-;25713:7;25680:18;:41::i;:::-;25672:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25786:39;25800:4;25806:2;25810:7;25819:5;25786:13;:39::i;:::-;25505:328;;;;:::o;45913:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49768:790::-;49886:13;49950:15;49941:6;49920:18;;:27;;;;:::i;:::-;:45;49917:632;;;50013:16;50021:7;50013;:16::i;:::-;49991:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;50117:28;50148:10;:8;:10::i;:::-;50117:41;;50220:1;50195:14;50189:28;:32;:287;;;;;;;;;;;;;;;;;50313:14;50354:18;:7;:16;:18::i;:::-;50399:13;50270:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50189:287;50169:307;;;;;49917:632;50524:13;50517:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49768:790;;;;:::o;46043:31::-;;;;:::o;46188:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;51350:151::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51476:17:::1;51460:13;:33;;;;;;;;;;;;:::i;:::-;;51350:151:::0;:::o;52899:88::-;52940:4;52964:15;52957:22;;52899:88;:::o;24608:164::-;24705:4;24729:18;:25;24748:5;24729:25;;;;;;;;;;;;;;;:35;24755:8;24729:35;;;;;;;;;;;;;;;;;;;;;;;;;24722:42;;24608:164;;;;:::o;44897:201::-;44219:12;:10;:12::i;:::-;44208:23;;:7;:5;:7::i;:::-;:23;;;44200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45006:1:::1;44986:22;;:8;:22;;;;44978:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45062:28;45081:8;45062:18;:28::i;:::-;44897:201:::0;:::o;21585:305::-;21687:4;21739:25;21724:40;;;:11;:40;;;;:105;;;;21796:33;21781:48;;;:11;:48;;;;21724:105;:158;;;;21846:36;21870:11;21846:23;:36::i;:::-;21724:158;21704:178;;21585:305;;;:::o;16821:98::-;16874:7;16901:10;16894:17;;16821:98;:::o;27343:127::-;27408:4;27460:1;27432:30;;:7;:16;27440:7;27432:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27425:37;;27343:127;;;:::o;31489:174::-;31591:2;31564:15;:24;31580:7;31564:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31647:7;31643:2;31609:46;;31618:23;31633:7;31618:14;:23::i;:::-;31609:46;;;;;;;;;;;;31489:174;;:::o;27637:348::-;27730:4;27755:16;27763:7;27755;:16::i;:::-;27747:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27831:13;27847:23;27862:7;27847:14;:23::i;:::-;27831:39;;27900:5;27889:16;;:7;:16;;;:51;;;;27933:7;27909:31;;:20;27921:7;27909:11;:20::i;:::-;:31;;;27889:51;:87;;;;27944:32;27961:5;27968:7;27944:16;:32::i;:::-;27889:87;27881:96;;;27637:348;;;;:::o;30746:625::-;30905:4;30878:31;;:23;30893:7;30878:14;:23::i;:::-;:31;;;30870:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30984:1;30970:16;;:2;:16;;;;30962:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31040:39;31061:4;31067:2;31071:7;31040:20;:39::i;:::-;31144:29;31161:1;31165:7;31144:8;:29::i;:::-;31205:1;31186:9;:15;31196:4;31186:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31234:1;31217:9;:13;31227:2;31217:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31265:2;31246:7;:16;31254:7;31246:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31304:7;31300:2;31285:27;;31294:4;31285:27;;;;;;;;;;;;31325:38;31345:4;31351:2;31355:7;31325:19;:38::i;:::-;30746:625;;;:::o;28327:110::-;28403:26;28413:2;28417:7;28403:26;;;;;;;;;;;;:9;:26::i;:::-;28327:110;;:::o;45258:191::-;45332:16;45351:6;;;;;;;;;;;45332:25;;45377:8;45368:6;;:17;;;;;;;;;;;;;;;;;;45432:8;45401:40;;45422:8;45401:40;;;;;;;;;;;;45321:128;45258:191;:::o;31805:315::-;31960:8;31951:17;;:5;:17;;;;31943:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32047:8;32009:18;:25;32028:5;32009:25;;;;;;;;;;;;;;;:35;32035:8;32009:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32093:8;32071:41;;32086:5;32071:41;;;32103:8;32071:41;;;;;;:::i;:::-;;;;;;;;31805:315;;;:::o;26715:::-;26872:28;26882:4;26888:2;26892:7;26872:9;:28::i;:::-;26919:48;26942:4;26948:2;26952:7;26961:5;26919:22;:48::i;:::-;26911:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26715:315;;;;:::o;46747:108::-;46807:13;46840:7;46833:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46747:108;:::o;17398:723::-;17454:13;17684:1;17675:5;:10;17671:53;;;17702:10;;;;;;;;;;;;;;;;;;;;;17671:53;17734:12;17749:5;17734:20;;17765:14;17790:78;17805:1;17797:4;:9;17790:78;;17823:8;;;;;:::i;:::-;;;;17854:2;17846:10;;;;;:::i;:::-;;;17790:78;;;17878:19;17910:6;17900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17878:39;;17928:154;17944:1;17935:5;:10;17928:154;;17972:1;17962:11;;;;;:::i;:::-;;;18039:2;18031:5;:10;;;;:::i;:::-;18018:2;:24;;;;:::i;:::-;18005:39;;17988:6;17995;17988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18068:2;18059:11;;;;;:::i;:::-;;;17928:154;;;18106:6;18092:21;;;;;17398:723;;;;:::o;20018:157::-;20103:4;20142:25;20127:40;;;:11;:40;;;;20120:47;;20018:157;;;:::o;38458:589::-;38602:45;38629:4;38635:2;38639:7;38602:26;:45::i;:::-;38680:1;38664:18;;:4;:18;;;38660:187;;;38699:40;38731:7;38699:31;:40::i;:::-;38660:187;;;38769:2;38761:10;;:4;:10;;;38757:90;;38788:47;38821:4;38827:7;38788:32;:47::i;:::-;38757:90;38660:187;38875:1;38861:16;;:2;:16;;;38857:183;;;38894:45;38931:7;38894:36;:45::i;:::-;38857:183;;;38967:4;38961:10;;:2;:10;;;38957:83;;38988:40;39016:2;39020:7;38988:27;:40::i;:::-;38957:83;38857:183;38458:589;;;:::o;34567:125::-;;;;:::o;28664:321::-;28794:18;28800:2;28804:7;28794:5;:18::i;:::-;28845:54;28876:1;28880:2;28884:7;28893:5;28845:22;:54::i;:::-;28823:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28664:321;;;:::o;32685:799::-;32840:4;32861:15;:2;:13;;;:15::i;:::-;32857:620;;;32913:2;32897:36;;;32934:12;:10;:12::i;:::-;32948:4;32954:7;32963:5;32897:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32893:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33156:1;33139:6;:13;:18;33135:272;;;33182:60;;;;;;;;;;:::i;:::-;;;;;;;;33135:272;33357:6;33351:13;33342:6;33338:2;33334:15;33327:38;32893:529;33030:41;;;33020:51;;;:6;:51;;;;33013:58;;;;;32857:620;33461:4;33454:11;;32685:799;;;;;;;:::o;34056:126::-;;;;:::o;39770:164::-;39874:10;:17;;;;39847:15;:24;39863:7;39847:24;;;;;;;;;;;:44;;;;39902:10;39918:7;39902:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39770:164;:::o;40561:988::-;40827:22;40877:1;40852:22;40869:4;40852:16;:22::i;:::-;:26;;;;:::i;:::-;40827:51;;40889:18;40910:17;:26;40928:7;40910:26;;;;;;;;;;;;40889:47;;41057:14;41043:10;:28;41039:328;;41088:19;41110:12;:18;41123:4;41110:18;;;;;;;;;;;;;;;:34;41129:14;41110:34;;;;;;;;;;;;41088:56;;41194:11;41161:12;:18;41174:4;41161:18;;;;;;;;;;;;;;;:30;41180:10;41161:30;;;;;;;;;;;:44;;;;41311:10;41278:17;:30;41296:11;41278:30;;;;;;;;;;;:43;;;;41073:294;41039:328;41463:17;:26;41481:7;41463:26;;;;;;;;;;;41456:33;;;41507:12;:18;41520:4;41507:18;;;;;;;;;;;;;;;:34;41526:14;41507:34;;;;;;;;;;;41500:41;;;40642:907;;40561:988;;:::o;41844:1079::-;42097:22;42142:1;42122:10;:17;;;;:21;;;;:::i;:::-;42097:46;;42154:18;42175:15;:24;42191:7;42175:24;;;;;;;;;;;;42154:45;;42526:19;42548:10;42559:14;42548:26;;;;;;;;:::i;:::-;;;;;;;;;;42526:48;;42612:11;42587:10;42598;42587:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42723:10;42692:15;:28;42708:11;42692:28;;;;;;;;;;;:41;;;;42864:15;:24;42880:7;42864:24;;;;;;;;;;;42857:31;;;42899:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41915:1008;;;41844:1079;:::o;39348:221::-;39433:14;39450:20;39467:2;39450:16;:20::i;:::-;39433:37;;39508:7;39481:12;:16;39494:2;39481:16;;;;;;;;;;;;;;;:24;39498:6;39481:24;;;;;;;;;;;:34;;;;39555:6;39526:17;:26;39544:7;39526:26;;;;;;;;;;;:35;;;;39422:147;39348:221;;:::o;29321:439::-;29415:1;29401:16;;:2;:16;;;;29393:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29474:16;29482:7;29474;:16::i;:::-;29473:17;29465:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29536:45;29565:1;29569:2;29573:7;29536:20;:45::i;:::-;29611:1;29594:9;:13;29604:2;29594:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29642:2;29623:7;:16;29631:7;29623:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29687:7;29683:2;29662:33;;29679:1;29662:33;;;;;;;;;;;;29708:44;29736:1;29740:2;29744:7;29708:19;:44::i;:::-;29321:439;;:::o;8874:326::-;8934:4;9191:1;9169:7;:19;;;:23;9162:30;;8874:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:370::-;2410:5;2459:3;2452:4;2444:6;2440:17;2436:27;2426:122;;2467:79;;:::i;:::-;2426:122;2584:6;2571:20;2609:94;2699:3;2691:6;2684:4;2676:6;2672:17;2609:94;:::i;:::-;2600:103;;2416:293;2339:370;;;;:::o;2732:568::-;2805:8;2815:6;2865:3;2858:4;2850:6;2846:17;2842:27;2832:122;;2873:79;;:::i;:::-;2832:122;2986:6;2973:20;2963:30;;3016:18;3008:6;3005:30;3002:117;;;3038:79;;:::i;:::-;3002:117;3152:4;3144:6;3140:17;3128:29;;3206:3;3198:4;3190:6;3186:17;3176:8;3172:32;3169:41;3166:128;;;3213:79;;:::i;:::-;3166:128;2732:568;;;;;:::o;3306:133::-;3349:5;3387:6;3374:20;3365:29;;3403:30;3427:5;3403:30;:::i;:::-;3306:133;;;;:::o;3445:137::-;3490:5;3528:6;3515:20;3506:29;;3544:32;3570:5;3544:32;:::i;:::-;3445:137;;;;:::o;3588:141::-;3644:5;3675:6;3669:13;3660:22;;3691:32;3717:5;3691:32;:::i;:::-;3588:141;;;;:::o;3748:338::-;3803:5;3852:3;3845:4;3837:6;3833:17;3829:27;3819:122;;3860:79;;:::i;:::-;3819:122;3977:6;3964:20;4002:78;4076:3;4068:6;4061:4;4053:6;4049:17;4002:78;:::i;:::-;3993:87;;3809:277;3748:338;;;;:::o;4106:340::-;4162:5;4211:3;4204:4;4196:6;4192:17;4188:27;4178:122;;4219:79;;:::i;:::-;4178:122;4336:6;4323:20;4361:79;4436:3;4428:6;4421:4;4413:6;4409:17;4361:79;:::i;:::-;4352:88;;4168:278;4106:340;;;;:::o;4452:139::-;4498:5;4536:6;4523:20;4514:29;;4552:33;4579:5;4552:33;:::i;:::-;4452:139;;;;:::o;4597:329::-;4656:6;4705:2;4693:9;4684:7;4680:23;4676:32;4673:119;;;4711:79;;:::i;:::-;4673:119;4831:1;4856:53;4901:7;4892:6;4881:9;4877:22;4856:53;:::i;:::-;4846:63;;4802:117;4597:329;;;;:::o;4932:474::-;5000:6;5008;5057:2;5045:9;5036:7;5032:23;5028:32;5025:119;;;5063:79;;:::i;:::-;5025:119;5183:1;5208:53;5253:7;5244:6;5233:9;5229:22;5208:53;:::i;:::-;5198:63;;5154:117;5310:2;5336:53;5381:7;5372:6;5361:9;5357:22;5336:53;:::i;:::-;5326:63;;5281:118;4932:474;;;;;:::o;5412:619::-;5489:6;5497;5505;5554:2;5542:9;5533:7;5529:23;5525:32;5522:119;;;5560:79;;:::i;:::-;5522:119;5680:1;5705:53;5750:7;5741:6;5730:9;5726:22;5705:53;:::i;:::-;5695:63;;5651:117;5807:2;5833:53;5878:7;5869:6;5858:9;5854:22;5833:53;:::i;:::-;5823:63;;5778:118;5935:2;5961:53;6006:7;5997:6;5986:9;5982:22;5961:53;:::i;:::-;5951:63;;5906:118;5412:619;;;;;:::o;6037:943::-;6132:6;6140;6148;6156;6205:3;6193:9;6184:7;6180:23;6176:33;6173:120;;;6212:79;;:::i;:::-;6173:120;6332:1;6357:53;6402:7;6393:6;6382:9;6378:22;6357:53;:::i;:::-;6347:63;;6303:117;6459:2;6485:53;6530:7;6521:6;6510:9;6506:22;6485:53;:::i;:::-;6475:63;;6430:118;6587:2;6613:53;6658:7;6649:6;6638:9;6634:22;6613:53;:::i;:::-;6603:63;;6558:118;6743:2;6732:9;6728:18;6715:32;6774:18;6766:6;6763:30;6760:117;;;6796:79;;:::i;:::-;6760:117;6901:62;6955:7;6946:6;6935:9;6931:22;6901:62;:::i;:::-;6891:72;;6686:287;6037:943;;;;;;;:::o;6986:468::-;7051:6;7059;7108:2;7096:9;7087:7;7083:23;7079:32;7076:119;;;7114:79;;:::i;:::-;7076:119;7234:1;7259:53;7304:7;7295:6;7284:9;7280:22;7259:53;:::i;:::-;7249:63;;7205:117;7361:2;7387:50;7429:7;7420:6;7409:9;7405:22;7387:50;:::i;:::-;7377:60;;7332:115;6986:468;;;;;:::o;7460:474::-;7528:6;7536;7585:2;7573:9;7564:7;7560:23;7556:32;7553:119;;;7591:79;;:::i;:::-;7553:119;7711:1;7736:53;7781:7;7772:6;7761:9;7757:22;7736:53;:::i;:::-;7726:63;;7682:117;7838:2;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7809:118;7460:474;;;;;:::o;7940:934::-;8062:6;8070;8078;8086;8135:2;8123:9;8114:7;8110:23;8106:32;8103:119;;;8141:79;;:::i;:::-;8103:119;8289:1;8278:9;8274:17;8261:31;8319:18;8311:6;8308:30;8305:117;;;8341:79;;:::i;:::-;8305:117;8454:80;8526:7;8517:6;8506:9;8502:22;8454:80;:::i;:::-;8436:98;;;;8232:312;8611:2;8600:9;8596:18;8583:32;8642:18;8634:6;8631:30;8628:117;;;8664:79;;:::i;:::-;8628:117;8777:80;8849:7;8840:6;8829:9;8825:22;8777:80;:::i;:::-;8759:98;;;;8554:313;7940:934;;;;;;;:::o;8880:539::-;8964:6;9013:2;9001:9;8992:7;8988:23;8984:32;8981:119;;;9019:79;;:::i;:::-;8981:119;9167:1;9156:9;9152:17;9139:31;9197:18;9189:6;9186:30;9183:117;;;9219:79;;:::i;:::-;9183:117;9324:78;9394:7;9385:6;9374:9;9370:22;9324:78;:::i;:::-;9314:88;;9110:302;8880:539;;;;:::o;9425:323::-;9481:6;9530:2;9518:9;9509:7;9505:23;9501:32;9498:119;;;9536:79;;:::i;:::-;9498:119;9656:1;9681:50;9723:7;9714:6;9703:9;9699:22;9681:50;:::i;:::-;9671:60;;9627:114;9425:323;;;;:::o;9754:327::-;9812:6;9861:2;9849:9;9840:7;9836:23;9832:32;9829:119;;;9867:79;;:::i;:::-;9829:119;9987:1;10012:52;10056:7;10047:6;10036:9;10032:22;10012:52;:::i;:::-;10002:62;;9958:116;9754:327;;;;:::o;10087:349::-;10156:6;10205:2;10193:9;10184:7;10180:23;10176:32;10173:119;;;10211:79;;:::i;:::-;10173:119;10331:1;10356:63;10411:7;10402:6;10391:9;10387:22;10356:63;:::i;:::-;10346:73;;10302:127;10087:349;;;;:::o;10442:509::-;10511:6;10560:2;10548:9;10539:7;10535:23;10531:32;10528:119;;;10566:79;;:::i;:::-;10528:119;10714:1;10703:9;10699:17;10686:31;10744:18;10736:6;10733:30;10730:117;;;10766:79;;:::i;:::-;10730:117;10871:63;10926:7;10917:6;10906:9;10902:22;10871:63;:::i;:::-;10861:73;;10657:287;10442:509;;;;:::o;10957:329::-;11016:6;11065:2;11053:9;11044:7;11040:23;11036:32;11033:119;;;11071:79;;:::i;:::-;11033:119;11191:1;11216:53;11261:7;11252:6;11241:9;11237:22;11216:53;:::i;:::-;11206:63;;11162:117;10957:329;;;;:::o;11292:179::-;11361:10;11382:46;11424:3;11416:6;11382:46;:::i;:::-;11460:4;11455:3;11451:14;11437:28;;11292:179;;;;:::o;11477:118::-;11564:24;11582:5;11564:24;:::i;:::-;11559:3;11552:37;11477:118;;:::o;11631:732::-;11750:3;11779:54;11827:5;11779:54;:::i;:::-;11849:86;11928:6;11923:3;11849:86;:::i;:::-;11842:93;;11959:56;12009:5;11959:56;:::i;:::-;12038:7;12069:1;12054:284;12079:6;12076:1;12073:13;12054:284;;;12155:6;12149:13;12182:63;12241:3;12226:13;12182:63;:::i;:::-;12175:70;;12268:60;12321:6;12268:60;:::i;:::-;12258:70;;12114:224;12101:1;12098;12094:9;12089:14;;12054:284;;;12058:14;12354:3;12347:10;;11755:608;;;11631:732;;;;:::o;12369:109::-;12450:21;12465:5;12450:21;:::i;:::-;12445:3;12438:34;12369:109;;:::o;12484:360::-;12570:3;12598:38;12630:5;12598:38;:::i;:::-;12652:70;12715:6;12710:3;12652:70;:::i;:::-;12645:77;;12731:52;12776:6;12771:3;12764:4;12757:5;12753:16;12731:52;:::i;:::-;12808:29;12830:6;12808:29;:::i;:::-;12803:3;12799:39;12792:46;;12574:270;12484:360;;;;:::o;12850:364::-;12938:3;12966:39;12999:5;12966:39;:::i;:::-;13021:71;13085:6;13080:3;13021:71;:::i;:::-;13014:78;;13101:52;13146:6;13141:3;13134:4;13127:5;13123:16;13101:52;:::i;:::-;13178:29;13200:6;13178:29;:::i;:::-;13173:3;13169:39;13162:46;;12942:272;12850:364;;;;:::o;13220:377::-;13326:3;13354:39;13387:5;13354:39;:::i;:::-;13409:89;13491:6;13486:3;13409:89;:::i;:::-;13402:96;;13507:52;13552:6;13547:3;13540:4;13533:5;13529:16;13507:52;:::i;:::-;13584:6;13579:3;13575:16;13568:23;;13330:267;13220:377;;;;:::o;13627:845::-;13730:3;13767:5;13761:12;13796:36;13822:9;13796:36;:::i;:::-;13848:89;13930:6;13925:3;13848:89;:::i;:::-;13841:96;;13968:1;13957:9;13953:17;13984:1;13979:137;;;;14130:1;14125:341;;;;13946:520;;13979:137;14063:4;14059:9;14048;14044:25;14039:3;14032:38;14099:6;14094:3;14090:16;14083:23;;13979:137;;14125:341;14192:38;14224:5;14192:38;:::i;:::-;14252:1;14266:154;14280:6;14277:1;14274:13;14266:154;;;14354:7;14348:14;14344:1;14339:3;14335:11;14328:35;14404:1;14395:7;14391:15;14380:26;;14302:4;14299:1;14295:12;14290:17;;14266:154;;;14449:6;14444:3;14440:16;14433:23;;14132:334;;13946:520;;13734:738;;13627:845;;;;:::o;14478:366::-;14620:3;14641:67;14705:2;14700:3;14641:67;:::i;:::-;14634:74;;14717:93;14806:3;14717:93;:::i;:::-;14835:2;14830:3;14826:12;14819:19;;14478:366;;;:::o;14850:::-;14992:3;15013:67;15077:2;15072:3;15013:67;:::i;:::-;15006:74;;15089:93;15178:3;15089:93;:::i;:::-;15207:2;15202:3;15198:12;15191:19;;14850:366;;;:::o;15222:::-;15364:3;15385:67;15449:2;15444:3;15385:67;:::i;:::-;15378:74;;15461:93;15550:3;15461:93;:::i;:::-;15579:2;15574:3;15570:12;15563:19;;15222:366;;;:::o;15594:::-;15736:3;15757:67;15821:2;15816:3;15757:67;:::i;:::-;15750:74;;15833:93;15922:3;15833:93;:::i;:::-;15951:2;15946:3;15942:12;15935:19;;15594:366;;;:::o;15966:::-;16108:3;16129:67;16193:2;16188:3;16129:67;:::i;:::-;16122:74;;16205:93;16294:3;16205:93;:::i;:::-;16323:2;16318:3;16314:12;16307:19;;15966:366;;;:::o;16338:::-;16480:3;16501:67;16565:2;16560:3;16501:67;:::i;:::-;16494:74;;16577:93;16666:3;16577:93;:::i;:::-;16695:2;16690:3;16686:12;16679:19;;16338:366;;;:::o;16710:::-;16852:3;16873:67;16937:2;16932:3;16873:67;:::i;:::-;16866:74;;16949:93;17038:3;16949:93;:::i;:::-;17067:2;17062:3;17058:12;17051:19;;16710:366;;;:::o;17082:::-;17224:3;17245:67;17309:2;17304:3;17245:67;:::i;:::-;17238:74;;17321:93;17410:3;17321:93;:::i;:::-;17439:2;17434:3;17430:12;17423:19;;17082:366;;;:::o;17454:::-;17596:3;17617:67;17681:2;17676:3;17617:67;:::i;:::-;17610:74;;17693:93;17782:3;17693:93;:::i;:::-;17811:2;17806:3;17802:12;17795:19;;17454:366;;;:::o;17826:::-;17968:3;17989:67;18053:2;18048:3;17989:67;:::i;:::-;17982:74;;18065:93;18154:3;18065:93;:::i;:::-;18183:2;18178:3;18174:12;18167:19;;17826:366;;;:::o;18198:::-;18340:3;18361:67;18425:2;18420:3;18361:67;:::i;:::-;18354:74;;18437:93;18526:3;18437:93;:::i;:::-;18555:2;18550:3;18546:12;18539:19;;18198:366;;;:::o;18570:::-;18712:3;18733:67;18797:2;18792:3;18733:67;:::i;:::-;18726:74;;18809:93;18898:3;18809:93;:::i;:::-;18927:2;18922:3;18918:12;18911:19;;18570:366;;;:::o;18942:::-;19084:3;19105:67;19169:2;19164:3;19105:67;:::i;:::-;19098:74;;19181:93;19270:3;19181:93;:::i;:::-;19299:2;19294:3;19290:12;19283:19;;18942:366;;;:::o;19314:::-;19456:3;19477:67;19541:2;19536:3;19477:67;:::i;:::-;19470:74;;19553:93;19642:3;19553:93;:::i;:::-;19671:2;19666:3;19662:12;19655:19;;19314:366;;;:::o;19686:::-;19828:3;19849:67;19913:2;19908:3;19849:67;:::i;:::-;19842:74;;19925:93;20014:3;19925:93;:::i;:::-;20043:2;20038:3;20034:12;20027:19;;19686:366;;;:::o;20058:::-;20200:3;20221:67;20285:2;20280:3;20221:67;:::i;:::-;20214:74;;20297:93;20386:3;20297:93;:::i;:::-;20415:2;20410:3;20406:12;20399:19;;20058:366;;;:::o;20430:::-;20572:3;20593:67;20657:2;20652:3;20593:67;:::i;:::-;20586:74;;20669:93;20758:3;20669:93;:::i;:::-;20787:2;20782:3;20778:12;20771:19;;20430:366;;;:::o;20802:::-;20944:3;20965:67;21029:2;21024:3;20965:67;:::i;:::-;20958:74;;21041:93;21130:3;21041:93;:::i;:::-;21159:2;21154:3;21150:12;21143:19;;20802:366;;;:::o;21174:::-;21316:3;21337:67;21401:2;21396:3;21337:67;:::i;:::-;21330:74;;21413:93;21502:3;21413:93;:::i;:::-;21531:2;21526:3;21522:12;21515:19;;21174:366;;;:::o;21546:::-;21688:3;21709:67;21773:2;21768:3;21709:67;:::i;:::-;21702:74;;21785:93;21874:3;21785:93;:::i;:::-;21903:2;21898:3;21894:12;21887:19;;21546:366;;;:::o;21918:::-;22060:3;22081:67;22145:2;22140:3;22081:67;:::i;:::-;22074:74;;22157:93;22246:3;22157:93;:::i;:::-;22275:2;22270:3;22266:12;22259:19;;21918:366;;;:::o;22290:::-;22432:3;22453:67;22517:2;22512:3;22453:67;:::i;:::-;22446:74;;22529:93;22618:3;22529:93;:::i;:::-;22647:2;22642:3;22638:12;22631:19;;22290:366;;;:::o;22662:::-;22804:3;22825:67;22889:2;22884:3;22825:67;:::i;:::-;22818:74;;22901:93;22990:3;22901:93;:::i;:::-;23019:2;23014:3;23010:12;23003:19;;22662:366;;;:::o;23034:398::-;23193:3;23214:83;23295:1;23290:3;23214:83;:::i;:::-;23207:90;;23306:93;23395:3;23306:93;:::i;:::-;23424:1;23419:3;23415:11;23408:18;;23034:398;;;:::o;23438:366::-;23580:3;23601:67;23665:2;23660:3;23601:67;:::i;:::-;23594:74;;23677:93;23766:3;23677:93;:::i;:::-;23795:2;23790:3;23786:12;23779:19;;23438:366;;;:::o;23810:::-;23952:3;23973:67;24037:2;24032:3;23973:67;:::i;:::-;23966:74;;24049:93;24138:3;24049:93;:::i;:::-;24167:2;24162:3;24158:12;24151:19;;23810:366;;;:::o;24182:::-;24324:3;24345:67;24409:2;24404:3;24345:67;:::i;:::-;24338:74;;24421:93;24510:3;24421:93;:::i;:::-;24539:2;24534:3;24530:12;24523:19;;24182:366;;;:::o;24554:365::-;24696:3;24717:66;24781:1;24776:3;24717:66;:::i;:::-;24710:73;;24792:93;24881:3;24792:93;:::i;:::-;24910:2;24905:3;24901:12;24894:19;;24554:365;;;:::o;24925:108::-;25002:24;25020:5;25002:24;:::i;:::-;24997:3;24990:37;24925:108;;:::o;25039:118::-;25126:24;25144:5;25126:24;:::i;:::-;25121:3;25114:37;25039:118;;:::o;25163:589::-;25388:3;25410:95;25501:3;25492:6;25410:95;:::i;:::-;25403:102;;25522:95;25613:3;25604:6;25522:95;:::i;:::-;25515:102;;25634:92;25722:3;25713:6;25634:92;:::i;:::-;25627:99;;25743:3;25736:10;;25163:589;;;;;;:::o;25758:379::-;25942:3;25964:147;26107:3;25964:147;:::i;:::-;25957:154;;26128:3;26121:10;;25758:379;;;:::o;26143:222::-;26236:4;26274:2;26263:9;26259:18;26251:26;;26287:71;26355:1;26344:9;26340:17;26331:6;26287:71;:::i;:::-;26143:222;;;;:::o;26371:640::-;26566:4;26604:3;26593:9;26589:19;26581:27;;26618:71;26686:1;26675:9;26671:17;26662:6;26618:71;:::i;:::-;26699:72;26767:2;26756:9;26752:18;26743:6;26699:72;:::i;:::-;26781;26849:2;26838:9;26834:18;26825:6;26781:72;:::i;:::-;26900:9;26894:4;26890:20;26885:2;26874:9;26870:18;26863:48;26928:76;26999:4;26990:6;26928:76;:::i;:::-;26920:84;;26371:640;;;;;;;:::o;27017:373::-;27160:4;27198:2;27187:9;27183:18;27175:26;;27247:9;27241:4;27237:20;27233:1;27222:9;27218:17;27211:47;27275:108;27378:4;27369:6;27275:108;:::i;:::-;27267:116;;27017:373;;;;:::o;27396:210::-;27483:4;27521:2;27510:9;27506:18;27498:26;;27534:65;27596:1;27585:9;27581:17;27572:6;27534:65;:::i;:::-;27396:210;;;;:::o;27612:313::-;27725:4;27763:2;27752:9;27748:18;27740:26;;27812:9;27806:4;27802:20;27798:1;27787:9;27783:17;27776:47;27840:78;27913:4;27904:6;27840:78;:::i;:::-;27832:86;;27612:313;;;;:::o;27931:419::-;28097:4;28135:2;28124:9;28120:18;28112:26;;28184:9;28178:4;28174:20;28170:1;28159:9;28155:17;28148:47;28212:131;28338:4;28212:131;:::i;:::-;28204:139;;27931:419;;;:::o;28356:::-;28522:4;28560:2;28549:9;28545:18;28537:26;;28609:9;28603:4;28599:20;28595:1;28584:9;28580:17;28573:47;28637:131;28763:4;28637:131;:::i;:::-;28629:139;;28356:419;;;:::o;28781:::-;28947:4;28985:2;28974:9;28970:18;28962:26;;29034:9;29028:4;29024:20;29020:1;29009:9;29005:17;28998:47;29062:131;29188:4;29062:131;:::i;:::-;29054:139;;28781:419;;;:::o;29206:::-;29372:4;29410:2;29399:9;29395:18;29387:26;;29459:9;29453:4;29449:20;29445:1;29434:9;29430:17;29423:47;29487:131;29613:4;29487:131;:::i;:::-;29479:139;;29206:419;;;:::o;29631:::-;29797:4;29835:2;29824:9;29820:18;29812:26;;29884:9;29878:4;29874:20;29870:1;29859:9;29855:17;29848:47;29912:131;30038:4;29912:131;:::i;:::-;29904:139;;29631:419;;;:::o;30056:::-;30222:4;30260:2;30249:9;30245:18;30237:26;;30309:9;30303:4;30299:20;30295:1;30284:9;30280:17;30273:47;30337:131;30463:4;30337:131;:::i;:::-;30329:139;;30056:419;;;:::o;30481:::-;30647:4;30685:2;30674:9;30670:18;30662:26;;30734:9;30728:4;30724:20;30720:1;30709:9;30705:17;30698:47;30762:131;30888:4;30762:131;:::i;:::-;30754:139;;30481:419;;;:::o;30906:::-;31072:4;31110:2;31099:9;31095:18;31087:26;;31159:9;31153:4;31149:20;31145:1;31134:9;31130:17;31123:47;31187:131;31313:4;31187:131;:::i;:::-;31179:139;;30906:419;;;:::o;31331:::-;31497:4;31535:2;31524:9;31520:18;31512:26;;31584:9;31578:4;31574:20;31570:1;31559:9;31555:17;31548:47;31612:131;31738:4;31612:131;:::i;:::-;31604:139;;31331:419;;;:::o;31756:::-;31922:4;31960:2;31949:9;31945:18;31937:26;;32009:9;32003:4;31999:20;31995:1;31984:9;31980:17;31973:47;32037:131;32163:4;32037:131;:::i;:::-;32029:139;;31756:419;;;:::o;32181:::-;32347:4;32385:2;32374:9;32370:18;32362:26;;32434:9;32428:4;32424:20;32420:1;32409:9;32405:17;32398:47;32462:131;32588:4;32462:131;:::i;:::-;32454:139;;32181:419;;;:::o;32606:::-;32772:4;32810:2;32799:9;32795:18;32787:26;;32859:9;32853:4;32849:20;32845:1;32834:9;32830:17;32823:47;32887:131;33013:4;32887:131;:::i;:::-;32879:139;;32606:419;;;:::o;33031:::-;33197:4;33235:2;33224:9;33220:18;33212:26;;33284:9;33278:4;33274:20;33270:1;33259:9;33255:17;33248:47;33312:131;33438:4;33312:131;:::i;:::-;33304:139;;33031:419;;;:::o;33456:::-;33622:4;33660:2;33649:9;33645:18;33637:26;;33709:9;33703:4;33699:20;33695:1;33684:9;33680:17;33673:47;33737:131;33863:4;33737:131;:::i;:::-;33729:139;;33456:419;;;:::o;33881:::-;34047:4;34085:2;34074:9;34070:18;34062:26;;34134:9;34128:4;34124:20;34120:1;34109:9;34105:17;34098:47;34162:131;34288:4;34162:131;:::i;:::-;34154:139;;33881:419;;;:::o;34306:::-;34472:4;34510:2;34499:9;34495:18;34487:26;;34559:9;34553:4;34549:20;34545:1;34534:9;34530:17;34523:47;34587:131;34713:4;34587:131;:::i;:::-;34579:139;;34306:419;;;:::o;34731:::-;34897:4;34935:2;34924:9;34920:18;34912:26;;34984:9;34978:4;34974:20;34970:1;34959:9;34955:17;34948:47;35012:131;35138:4;35012:131;:::i;:::-;35004:139;;34731:419;;;:::o;35156:::-;35322:4;35360:2;35349:9;35345:18;35337:26;;35409:9;35403:4;35399:20;35395:1;35384:9;35380:17;35373:47;35437:131;35563:4;35437:131;:::i;:::-;35429:139;;35156:419;;;:::o;35581:::-;35747:4;35785:2;35774:9;35770:18;35762:26;;35834:9;35828:4;35824:20;35820:1;35809:9;35805:17;35798:47;35862:131;35988:4;35862:131;:::i;:::-;35854:139;;35581:419;;;:::o;36006:::-;36172:4;36210:2;36199:9;36195:18;36187:26;;36259:9;36253:4;36249:20;36245:1;36234:9;36230:17;36223:47;36287:131;36413:4;36287:131;:::i;:::-;36279:139;;36006:419;;;:::o;36431:::-;36597:4;36635:2;36624:9;36620:18;36612:26;;36684:9;36678:4;36674:20;36670:1;36659:9;36655:17;36648:47;36712:131;36838:4;36712:131;:::i;:::-;36704:139;;36431:419;;;:::o;36856:::-;37022:4;37060:2;37049:9;37045:18;37037:26;;37109:9;37103:4;37099:20;37095:1;37084:9;37080:17;37073:47;37137:131;37263:4;37137:131;:::i;:::-;37129:139;;36856:419;;;:::o;37281:::-;37447:4;37485:2;37474:9;37470:18;37462:26;;37534:9;37528:4;37524:20;37520:1;37509:9;37505:17;37498:47;37562:131;37688:4;37562:131;:::i;:::-;37554:139;;37281:419;;;:::o;37706:::-;37872:4;37910:2;37899:9;37895:18;37887:26;;37959:9;37953:4;37949:20;37945:1;37934:9;37930:17;37923:47;37987:131;38113:4;37987:131;:::i;:::-;37979:139;;37706:419;;;:::o;38131:::-;38297:4;38335:2;38324:9;38320:18;38312:26;;38384:9;38378:4;38374:20;38370:1;38359:9;38355:17;38348:47;38412:131;38538:4;38412:131;:::i;:::-;38404:139;;38131:419;;;:::o;38556:::-;38722:4;38760:2;38749:9;38745:18;38737:26;;38809:9;38803:4;38799:20;38795:1;38784:9;38780:17;38773:47;38837:131;38963:4;38837:131;:::i;:::-;38829:139;;38556:419;;;:::o;38981:::-;39147:4;39185:2;39174:9;39170:18;39162:26;;39234:9;39228:4;39224:20;39220:1;39209:9;39205:17;39198:47;39262:131;39388:4;39262:131;:::i;:::-;39254:139;;38981:419;;;:::o;39406:222::-;39499:4;39537:2;39526:9;39522:18;39514:26;;39550:71;39618:1;39607:9;39603:17;39594:6;39550:71;:::i;:::-;39406:222;;;;:::o;39634:129::-;39668:6;39695:20;;:::i;:::-;39685:30;;39724:33;39752:4;39744:6;39724:33;:::i;:::-;39634:129;;;:::o;39769:75::-;39802:6;39835:2;39829:9;39819:19;;39769:75;:::o;39850:311::-;39927:4;40017:18;40009:6;40006:30;40003:56;;;40039:18;;:::i;:::-;40003:56;40089:4;40081:6;40077:17;40069:25;;40149:4;40143;40139:15;40131:23;;39850:311;;;:::o;40167:307::-;40228:4;40318:18;40310:6;40307:30;40304:56;;;40340:18;;:::i;:::-;40304:56;40378:29;40400:6;40378:29;:::i;:::-;40370:37;;40462:4;40456;40452:15;40444:23;;40167:307;;;:::o;40480:308::-;40542:4;40632:18;40624:6;40621:30;40618:56;;;40654:18;;:::i;:::-;40618:56;40692:29;40714:6;40692:29;:::i;:::-;40684:37;;40776:4;40770;40766:15;40758:23;;40480:308;;;:::o;40794:132::-;40861:4;40884:3;40876:11;;40914:4;40909:3;40905:14;40897:22;;40794:132;;;:::o;40932:141::-;40981:4;41004:3;40996:11;;41027:3;41024:1;41017:14;41061:4;41058:1;41048:18;41040:26;;40932:141;;;:::o;41079:114::-;41146:6;41180:5;41174:12;41164:22;;41079:114;;;:::o;41199:98::-;41250:6;41284:5;41278:12;41268:22;;41199:98;;;:::o;41303:99::-;41355:6;41389:5;41383:12;41373:22;;41303:99;;;:::o;41408:113::-;41478:4;41510;41505:3;41501:14;41493:22;;41408:113;;;:::o;41527:184::-;41626:11;41660:6;41655:3;41648:19;41700:4;41695:3;41691:14;41676:29;;41527:184;;;;:::o;41717:168::-;41800:11;41834:6;41829:3;41822:19;41874:4;41869:3;41865:14;41850:29;;41717:168;;;;:::o;41891:147::-;41992:11;42029:3;42014:18;;41891:147;;;;:::o;42044:169::-;42128:11;42162:6;42157:3;42150:19;42202:4;42197:3;42193:14;42178:29;;42044:169;;;;:::o;42219:148::-;42321:11;42358:3;42343:18;;42219:148;;;;:::o;42373:305::-;42413:3;42432:20;42450:1;42432:20;:::i;:::-;42427:25;;42466:20;42484:1;42466:20;:::i;:::-;42461:25;;42620:1;42552:66;42548:74;42545:1;42542:81;42539:107;;;42626:18;;:::i;:::-;42539:107;42670:1;42667;42663:9;42656:16;;42373:305;;;;:::o;42684:185::-;42724:1;42741:20;42759:1;42741:20;:::i;:::-;42736:25;;42775:20;42793:1;42775:20;:::i;:::-;42770:25;;42814:1;42804:35;;42819:18;;:::i;:::-;42804:35;42861:1;42858;42854:9;42849:14;;42684:185;;;;:::o;42875:348::-;42915:7;42938:20;42956:1;42938:20;:::i;:::-;42933:25;;42972:20;42990:1;42972:20;:::i;:::-;42967:25;;43160:1;43092:66;43088:74;43085:1;43082:81;43077:1;43070:9;43063:17;43059:105;43056:131;;;43167:18;;:::i;:::-;43056:131;43215:1;43212;43208:9;43197:20;;42875:348;;;;:::o;43229:191::-;43269:4;43289:20;43307:1;43289:20;:::i;:::-;43284:25;;43323:20;43341:1;43323:20;:::i;:::-;43318:25;;43362:1;43359;43356:8;43353:34;;;43367:18;;:::i;:::-;43353:34;43412:1;43409;43405:9;43397:17;;43229:191;;;;:::o;43426:96::-;43463:7;43492:24;43510:5;43492:24;:::i;:::-;43481:35;;43426:96;;;:::o;43528:90::-;43562:7;43605:5;43598:13;43591:21;43580:32;;43528:90;;;:::o;43624:149::-;43660:7;43700:66;43693:5;43689:78;43678:89;;43624:149;;;:::o;43779:126::-;43816:7;43856:42;43849:5;43845:54;43834:65;;43779:126;;;:::o;43911:77::-;43948:7;43977:5;43966:16;;43911:77;;;:::o;43994:154::-;44078:6;44073:3;44068;44055:30;44140:1;44131:6;44126:3;44122:16;44115:27;43994:154;;;:::o;44154:307::-;44222:1;44232:113;44246:6;44243:1;44240:13;44232:113;;;44331:1;44326:3;44322:11;44316:18;44312:1;44307:3;44303:11;44296:39;44268:2;44265:1;44261:10;44256:15;;44232:113;;;44363:6;44360:1;44357:13;44354:101;;;44443:1;44434:6;44429:3;44425:16;44418:27;44354:101;44203:258;44154:307;;;:::o;44467:320::-;44511:6;44548:1;44542:4;44538:12;44528:22;;44595:1;44589:4;44585:12;44616:18;44606:81;;44672:4;44664:6;44660:17;44650:27;;44606:81;44734:2;44726:6;44723:14;44703:18;44700:38;44697:84;;;44753:18;;:::i;:::-;44697:84;44518:269;44467:320;;;:::o;44793:281::-;44876:27;44898:4;44876:27;:::i;:::-;44868:6;44864:40;45006:6;44994:10;44991:22;44970:18;44958:10;44955:34;44952:62;44949:88;;;45017:18;;:::i;:::-;44949:88;45057:10;45053:2;45046:22;44836:238;44793:281;;:::o;45080:233::-;45119:3;45142:24;45160:5;45142:24;:::i;:::-;45133:33;;45188:66;45181:5;45178:77;45175:103;;;45258:18;;:::i;:::-;45175:103;45305:1;45298:5;45294:13;45287:20;;45080:233;;;:::o;45319:176::-;45351:1;45368:20;45386:1;45368:20;:::i;:::-;45363:25;;45402:20;45420:1;45402:20;:::i;:::-;45397:25;;45441:1;45431:35;;45446:18;;:::i;:::-;45431:35;45487:1;45484;45480:9;45475:14;;45319:176;;;;:::o;45501:180::-;45549:77;45546:1;45539:88;45646:4;45643:1;45636:15;45670:4;45667:1;45660:15;45687:180;45735:77;45732:1;45725:88;45832:4;45829:1;45822:15;45856:4;45853:1;45846:15;45873:180;45921:77;45918:1;45911:88;46018:4;46015:1;46008:15;46042:4;46039:1;46032:15;46059:180;46107:77;46104:1;46097:88;46204:4;46201:1;46194:15;46228:4;46225:1;46218:15;46245:180;46293:77;46290:1;46283:88;46390:4;46387:1;46380:15;46414:4;46411:1;46404:15;46431:180;46479:77;46476:1;46469:88;46576:4;46573:1;46566:15;46600:4;46597:1;46590:15;46617:117;46726:1;46723;46716:12;46740:117;46849:1;46846;46839:12;46863:117;46972:1;46969;46962:12;46986:117;47095:1;47092;47085:12;47109:117;47218:1;47215;47208:12;47232:117;47341:1;47338;47331:12;47355:102;47396:6;47447:2;47443:7;47438:2;47431:5;47427:14;47423:28;47413:38;;47355:102;;;:::o;47463:230::-;47603:34;47599:1;47591:6;47587:14;47580:58;47672:13;47667:2;47659:6;47655:15;47648:38;47463:230;:::o;47699:237::-;47839:34;47835:1;47827:6;47823:14;47816:58;47908:20;47903:2;47895:6;47891:15;47884:45;47699:237;:::o;47942:225::-;48082:34;48078:1;48070:6;48066:14;48059:58;48151:8;48146:2;48138:6;48134:15;48127:33;47942:225;:::o;48173:224::-;48313:34;48309:1;48301:6;48297:14;48290:58;48382:7;48377:2;48369:6;48365:15;48358:32;48173:224;:::o;48403:178::-;48543:30;48539:1;48531:6;48527:14;48520:54;48403:178;:::o;48587:223::-;48727:34;48723:1;48715:6;48711:14;48704:58;48796:6;48791:2;48783:6;48779:15;48772:31;48587:223;:::o;48816:175::-;48956:27;48952:1;48944:6;48940:14;48933:51;48816:175;:::o;48997:172::-;49137:24;49133:1;49125:6;49121:14;49114:48;48997:172;:::o;49175:231::-;49315:34;49311:1;49303:6;49299:14;49292:58;49384:14;49379:2;49371:6;49367:15;49360:39;49175:231;:::o;49412:220::-;49552:34;49548:1;49540:6;49536:14;49529:58;49621:3;49616:2;49608:6;49604:15;49597:28;49412:220;:::o;49638:243::-;49778:34;49774:1;49766:6;49762:14;49755:58;49847:26;49842:2;49834:6;49830:15;49823:51;49638:243;:::o;49887:229::-;50027:34;50023:1;50015:6;50011:14;50004:58;50096:12;50091:2;50083:6;50079:15;50072:37;49887:229;:::o;50122:228::-;50262:34;50258:1;50250:6;50246:14;50239:58;50331:11;50326:2;50318:6;50314:15;50307:36;50122:228;:::o;50356:227::-;50496:34;50492:1;50484:6;50480:14;50473:58;50565:10;50560:2;50552:6;50548:15;50541:35;50356:227;:::o;50589:182::-;50729:34;50725:1;50717:6;50713:14;50706:58;50589:182;:::o;50777:231::-;50917:34;50913:1;50905:6;50901:14;50894:58;50986:14;50981:2;50973:6;50969:15;50962:39;50777:231;:::o;51014:182::-;51154:34;51150:1;51142:6;51138:14;51131:58;51014:182;:::o;51202:175::-;51342:27;51338:1;51330:6;51326:14;51319:51;51202:175;:::o;51383:234::-;51523:34;51519:1;51511:6;51507:14;51500:58;51592:17;51587:2;51579:6;51575:15;51568:42;51383:234;:::o;51623:220::-;51763:34;51759:1;51751:6;51747:14;51740:58;51832:3;51827:2;51819:6;51815:15;51808:28;51623:220;:::o;51849:168::-;51989:20;51985:1;51977:6;51973:14;51966:44;51849:168;:::o;52023:167::-;52163:19;52159:1;52151:6;52147:14;52140:43;52023:167;:::o;52196:224::-;52336:34;52332:1;52324:6;52320:14;52313:58;52405:7;52400:2;52392:6;52388:15;52381:32;52196:224;:::o;52426:114::-;;:::o;52546:236::-;52686:34;52682:1;52674:6;52670:14;52663:58;52755:19;52750:2;52742:6;52738:15;52731:44;52546:236;:::o;52788:231::-;52928:34;52924:1;52916:6;52912:14;52905:58;52997:14;52992:2;52984:6;52980:15;52973:39;52788:231;:::o;53025:174::-;53165:26;53161:1;53153:6;53149:14;53142:50;53025:174;:::o;53205:156::-;53345:8;53341:1;53333:6;53329:14;53322:32;53205:156;:::o;53367:122::-;53440:24;53458:5;53440:24;:::i;:::-;53433:5;53430:35;53420:63;;53479:1;53476;53469:12;53420:63;53367:122;:::o;53495:116::-;53565:21;53580:5;53565:21;:::i;:::-;53558:5;53555:32;53545:60;;53601:1;53598;53591:12;53545:60;53495:116;:::o;53617:120::-;53689:23;53706:5;53689:23;:::i;:::-;53682:5;53679:34;53669:62;;53727:1;53724;53717:12;53669:62;53617:120;:::o;53743:122::-;53816:24;53834:5;53816:24;:::i;:::-;53809:5;53806:35;53796:63;;53855:1;53852;53845:12;53796:63;53743:122;:::o

Swarm Source

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