ETH Price: $2,524.19 (-3.04%)

Token

BLOCKDEED (BKDNFT)
 

Overview

Max Total Supply

0 BKDNFT

Holders

24

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
jeffbeamishmarket.eth
Balance
1 BKDNFT
0x773e46b1b1a9b0e976c1e6774350f84edb40da42
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:
Blockdeed

Compiler Version
v0.8.11+commit.d7f03943

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-28
*/

pragma solidity 0.8.11;

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
/**
 * @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);
}

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

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

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

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

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
/**
 * @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);
}

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
 * @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;
    }
}

// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
/**
 * @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;
    }
}

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

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

// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721URIStorage.sol)
/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @dev See {ERC721-_burn}. This override additionally checks to see if a
     * token-specific URI was set for the token, and if so, it deletes the token URI from
     * the storage mapping.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721Burnable.sol)
/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721,Ownable {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId) || _msgSender()==owner(), "ERC721: caller is not token owner nor approved");
        _burn(tokenId);
    }
}

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

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

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

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

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

interface IERC20 {
    function transfer(address recipient, uint256 amount) external returns (bool);
    function balanceOf(address who) view external returns (uint256);
}


contract Blockdeed is ERC721, ERC721URIStorage, Pausable, Ownable, ERC721Burnable {
    using Counters for Counters.Counter;

    string public tokenUri_="https://ipfs.io/ipfs/";

    address private withdrawalAddress=0x5EC48E6A351c6ffECb60ec01FfbFBA4916FEF39c;
    address private __owner;
    mapping(address => bool) public whitelisted;
    uint256 public nftPrice = 0.001 ether;
    uint256 public wlNftPrice = 0.0009 ether;
    
    Counters.Counter private _tokenIdCounter;

    event OwnerChanged(address _to);

    constructor() ERC721("BLOCKDEED", "BKDNFT") {
        __owner = msg.sender;
    }   

    function mint(uint8 nftCnt, string[] memory newTokenURIs) public payable{
        uint256 feeAmount= nftCnt * (whitelisted[msg.sender]==true ? wlNftPrice : nftPrice);
        require(feeAmount==msg.value, "Fees Does Not match!!!!");
        require(nftCnt==newTokenURIs.length, "URI or nftCnt not matched!!!!");

        uint256 newItemId = _tokenIdCounter.current();
        for (uint256 i = 0; i < nftCnt; i++) {
            _mint(msg.sender, newItemId);
            _setTokenURI(newItemId, newTokenURIs[i]);
            _tokenIdCounter.increment();
            newItemId++;
        }
    }

    // override functions
    function _baseURI() internal view  override returns (string memory) {
        return tokenUri_;
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal whenNotPaused override
    {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory)
    {
        return super.tokenURI(tokenId);
    }


    //only owner
    function whitelist(address[] memory _user) public onlyOwner {
        for(uint16 i=0;i<_user.length;i++){
            whitelisted[_user[i]] = true;
        }
    }
 
    function removeWhitelist(address[] memory _user) public onlyOwner {
        for(uint16 i=0;i<_user.length;i++){
            whitelisted[_user[i]] = false;
        }
    }
    function setNftPrice(uint256 _fee) public onlyOwner {
        nftPrice = _fee;
    }

    function setWlNftPrice(uint256 _fee) public onlyOwner {
        wlNftPrice = _fee;
    }

    function setTokenUri(string memory baseTo0kenUri) public onlyOwner {
        tokenUri_ = baseTo0kenUri;
    }
    function setWithdrawalAddress(address withdrawalAddress_) public onlyOwner {
        withdrawalAddress = withdrawalAddress_;
    }

    function withdrawETH() public onlyOwner { 
        (bool os, ) = payable(withdrawalAddress).call{value: address(this).balance}("");
        require(os,"Tx not success");
    }

    function changeOwner(address _newOwner) public onlyOwner {
        require(_newOwner!= address(0),"This address is not valid");
        __owner = _newOwner;
        emit OwnerChanged(_newOwner);
    }
    
    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_to","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"nftCnt","type":"uint8"},{"internalType":"string[]","name":"newTokenURIs","type":"string[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"}],"name":"removeWhitelist","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":"uint256","name":"_fee","type":"uint256"}],"name":"setNftPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTo0kenUri","type":"string"}],"name":"setTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"withdrawalAddress_","type":"address"}],"name":"setWithdrawalAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setWlNftPrice","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenUri_","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"}],"name":"whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wlNftPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526040518060400160405280601581526020017f68747470733a2f2f697066732e696f2f697066732f00000000000000000000008152506008908051906020019062000051929190620002bb565b50735ec48e6a351c6ffecb60ec01ffbfba4916fef39c600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066038d7ea4c68000600c556603328b944c4000600d55348015620000ca57600080fd5b506040518060400160405280600981526020017f424c4f434b4445454400000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f424b444e4654000000000000000000000000000000000000000000000000000081525081600090805190602001906200014f929190620002bb565b50806001908051906020019062000168929190620002bb565b5050506000600760006101000a81548160ff021916908315150217905550620001a66200019a620001ed60201b60201c565b620001f560201b60201c565b33600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003d0565b600033905090565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002c9906200039a565b90600052602060002090601f016020900481019282620002ed576000855562000339565b82601f106200030857805160ff191683800117855562000339565b8280016001018555821562000339579182015b82811115620003385782518255916020019190600101906200031b565b5b5090506200034891906200034c565b5090565b5b80821115620003675760008160009055506001016200034d565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003b357607f821691505b60208210811415620003ca57620003c96200036b565b5b50919050565b61402580620003e06000396000f3fe6080604052600436106101ee5760003560e01c806370a082311161010d578063b6a379ec116100a0578063d936547e1161006f578063d936547e1461069c578063e086e5ec146106d9578063e985e9c5146106f0578063f2fde38b1461072d578063fd25b2ba14610756576101ee565b8063b6a379ec146105e4578063b88d4fde1461060d578063bd8aa78014610636578063c87b56dd1461065f576101ee565b80638da5cb5b116100dc5780638da5cb5b1461053c57806395d89b4114610567578063a22cb46514610592578063a6f9dae1146105bb576101ee565b806370a08231146104a8578063715018a6146104e55780637d9a7a4c146104fc5780638456cb5914610525576101ee565b806321b8092e1161018557806342842e0e1161015457806342842e0e146103ee57806342966c68146104175780635c975abb146104405780636352211e1461046b576101ee565b806321b8092e1461035c578063232452161461038557806323b872dd146103ae5780633f4ba83a146103d7576101ee565b8063095ea7b3116101c1578063095ea7b3146102c15780630d39fc81146102ea5780630f4e57fd1461031557806312639f9f14610340576101ee565b806301ffc9a7146101f35780630675b7c61461023057806306fdde0314610259578063081812fc14610284575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612922565b610781565b604051610227919061296a565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612acb565b610863565b005b34801561026557600080fd5b5061026e610885565b60405161027b9190612b9c565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190612bf4565b610917565b6040516102b89190612c62565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612ca9565b61095d565b005b3480156102f657600080fd5b506102ff610a75565b60405161030c9190612cf8565b60405180910390f35b34801561032157600080fd5b5061032a610a7b565b6040516103379190612b9c565b60405180910390f35b61035a60048036038101906103559190612e32565b610b09565b005b34801561036857600080fd5b50610383600480360381019061037e9190612e8e565b610c83565b005b34801561039157600080fd5b506103ac60048036038101906103a79190612f7e565b610ccf565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190612fc7565b610d74565b005b3480156103e357600080fd5b506103ec610dd4565b005b3480156103fa57600080fd5b5061041560048036038101906104109190612fc7565b610de6565b005b34801561042357600080fd5b5061043e60048036038101906104399190612bf4565b610e06565b005b34801561044c57600080fd5b50610455610ea6565b604051610462919061296a565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d9190612bf4565b610ebd565b60405161049f9190612c62565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190612e8e565b610f6f565b6040516104dc9190612cf8565b60405180910390f35b3480156104f157600080fd5b506104fa611027565b005b34801561050857600080fd5b50610523600480360381019061051e9190612bf4565b61103b565b005b34801561053157600080fd5b5061053a61104d565b005b34801561054857600080fd5b5061055161105f565b60405161055e9190612c62565b60405180910390f35b34801561057357600080fd5b5061057c611089565b6040516105899190612b9c565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190613046565b61111b565b005b3480156105c757600080fd5b506105e260048036038101906105dd9190612e8e565b611131565b005b3480156105f057600080fd5b5061060b60048036038101906106069190612bf4565b611224565b005b34801561061957600080fd5b50610634600480360381019061062f9190613127565b611236565b005b34801561064257600080fd5b5061065d60048036038101906106589190612f7e565b611298565b005b34801561066b57600080fd5b5061068660048036038101906106819190612bf4565b61133d565b6040516106939190612b9c565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190612e8e565b61134f565b6040516106d0919061296a565b60405180910390f35b3480156106e557600080fd5b506106ee61136f565b005b3480156106fc57600080fd5b50610717600480360381019061071291906131aa565b611448565b604051610724919061296a565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190612e8e565b6114dc565b005b34801561076257600080fd5b5061076b611560565b6040516107789190612cf8565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085c575061085b82611566565b5b9050919050565b61086b6115d0565b80600890805190602001906108819291906127d3565b5050565b60606000805461089490613219565b80601f01602080910402602001604051908101604052809291908181526020018280546108c090613219565b801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b5050505050905090565b60006109228261164e565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096882610ebd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d0906132bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f8611699565b73ffffffffffffffffffffffffffffffffffffffff161480610a275750610a2681610a21611699565b611448565b5b610a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5d9061334f565b60405180910390fd5b610a7083836116a1565b505050565b600c5481565b60088054610a8890613219565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab490613219565b8015610b015780601f10610ad657610100808354040283529160200191610b01565b820191906000526020600020905b815481529060010190602001808311610ae457829003601f168201915b505050505081565b600060011515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610b6b57600c54610b6f565b600d545b8360ff16610b7d919061339e565b9050348114610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890613444565b60405180910390fd5b81518360ff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe906134b0565b60405180910390fd5b6000610c13600e61175a565b905060005b8460ff16811015610c7c57610c2d3383611768565b610c5182858381518110610c4457610c436134d0565b5b6020026020010151611942565b610c5b600e6119b6565b8180610c66906134ff565b9250508080610c74906134ff565b915050610c18565b5050505050565b610c8b6115d0565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cd76115d0565b60005b81518161ffff161015610d70576000600b6000848461ffff1681518110610d0457610d036134d0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d6890613556565b915050610cda565b5050565b610d85610d7f611699565b826119cc565b610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb906135f3565b60405180910390fd5b610dcf838383611a61565b505050565b610ddc6115d0565b610de4611cc8565b565b610e0183838360405180602001604052806000815250611236565b505050565b610e17610e11611699565b826119cc565b80610e5b5750610e2561105f565b73ffffffffffffffffffffffffffffffffffffffff16610e43611699565b73ffffffffffffffffffffffffffffffffffffffff16145b610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e91906135f3565b60405180910390fd5b610ea381611d2b565b50565b6000600760009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d9061365f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906136f1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102f6115d0565b6110396000611d37565b565b6110436115d0565b80600c8190555050565b6110556115d0565b61105d611dfd565b565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461109890613219565b80601f01602080910402602001604051908101604052809291908181526020018280546110c490613219565b80156111115780601f106110e657610100808354040283529160200191611111565b820191906000526020600020905b8154815290600101906020018083116110f457829003601f168201915b5050505050905090565b61112d611126611699565b8383611e60565b5050565b6111396115d0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061375d565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf36816040516112199190612c62565b60405180910390a150565b61122c6115d0565b80600d8190555050565b611247611241611699565b836119cc565b611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d906135f3565b60405180910390fd5b61129284848484611fcd565b50505050565b6112a06115d0565b60005b81518161ffff161015611339576001600b6000848461ffff16815181106112cd576112cc6134d0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061133190613556565b9150506112a3565b5050565b606061134882612029565b9050919050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6113776115d0565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516113bf906137ae565b60006040518083038185875af1925050503d80600081146113fc576040519150601f19603f3d011682016040523d82523d6000602084013e611401565b606091505b5050905080611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c9061380f565b60405180910390fd5b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114e46115d0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b906138a1565b60405180910390fd5b61155d81611d37565b50565b600d5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6115d8611699565b73ffffffffffffffffffffffffffffffffffffffff166115f661105f565b73ffffffffffffffffffffffffffffffffffffffff161461164c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116439061390d565b60405180910390fd5b565b6116578161213c565b611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d9061365f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661171483610ebd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90613979565b60405180910390fd5b6117e18161213c565b15611821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611818906139e5565b60405180910390fd5b61182d600083836121a8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461187d9190613a05565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461193e600083836121c0565b5050565b61194b8261213c565b61198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190613acd565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906119b19291906127d3565b505050565b6001816000016000828254019250508190555050565b6000806119d883610ebd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a1a5750611a198185611448565b5b80611a5857508373ffffffffffffffffffffffffffffffffffffffff16611a4084610917565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a8182610ebd565b73ffffffffffffffffffffffffffffffffffffffff1614611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace90613b5f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90613bf1565b60405180910390fd5b611b528383836121a8565b611b5d6000826116a1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bad9190613c11565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c049190613a05565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611cc38383836121c0565b505050565b611cd06121c5565b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611d14611699565b604051611d219190612c62565b60405180910390a1565b611d348161220e565b50565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e05612261565b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e49611699565b604051611e569190612c62565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613c91565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fc0919061296a565b60405180910390a3505050565b611fd8848484611a61565b611fe4848484846122ab565b612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201a90613d23565b60405180910390fd5b50505050565b60606120348261164e565b600060066000848152602001908152602001600020805461205490613219565b80601f016020809104026020016040519081016040528092919081815260200182805461208090613219565b80156120cd5780601f106120a2576101008083540402835291602001916120cd565b820191906000526020600020905b8154815290600101906020018083116120b057829003601f168201915b5050505050905060006120de612433565b90506000815114156120f4578192505050612137565b600082511115612129578082604051602001612111929190613d7f565b60405160208183030381529060405292505050612137565b612132846124c5565b925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6121b0612261565b6121bb83838361252d565b505050565b505050565b6121cd610ea6565b61220c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220390613def565b60405180910390fd5b565b61221781612532565b600060066000838152602001908152602001600020805461223790613219565b90501461225e5760066000828152602001908152602001600020600061225d9190612859565b5b50565b612269610ea6565b156122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090613e5b565b60405180910390fd5b565b60006122cc8473ffffffffffffffffffffffffffffffffffffffff1661264f565b15612426578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122f5611699565b8786866040518563ffffffff1660e01b81526004016123179493929190613ed0565b6020604051808303816000875af192505050801561235357506040513d601f19601f820116820180604052508101906123509190613f31565b60015b6123d6573d8060008114612383576040519150601f19603f3d011682016040523d82523d6000602084013e612388565b606091505b506000815114156123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c590613d23565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061242b565b600190505b949350505050565b60606008805461244290613219565b80601f016020809104026020016040519081016040528092919081815260200182805461246e90613219565b80156124bb5780601f10612490576101008083540402835291602001916124bb565b820191906000526020600020905b81548152906001019060200180831161249e57829003601f168201915b5050505050905090565b60606124d08261164e565b60006124da612433565b905060008151116124fa5760405180602001604052806000815250612525565b8061250484612672565b604051602001612515929190613d7f565b6040516020818303038152906040525b915050919050565b505050565b600061253d82610ebd565b905061254b816000846121a8565b6125566000836116a1565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a69190613c11565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461264b816000846121c0565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606060008214156126ba576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127ce565b600082905060005b600082146126ec5780806126d5906134ff565b915050600a826126e59190613f8d565b91506126c2565b60008167ffffffffffffffff811115612708576127076129a0565b5b6040519080825280601f01601f19166020018201604052801561273a5781602001600182028036833780820191505090505b5090505b600085146127c7576001826127539190613c11565b9150600a856127629190613fbe565b603061276e9190613a05565b60f81b818381518110612784576127836134d0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127c09190613f8d565b945061273e565b8093505050505b919050565b8280546127df90613219565b90600052602060002090601f0160209004810192826128015760008555612848565b82601f1061281a57805160ff1916838001178555612848565b82800160010185558215612848579182015b8281111561284757825182559160200191906001019061282c565b5b5090506128559190612899565b5090565b50805461286590613219565b6000825580601f106128775750612896565b601f0160209004906000526020600020908101906128959190612899565b5b50565b5b808211156128b257600081600090555060010161289a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128ff816128ca565b811461290a57600080fd5b50565b60008135905061291c816128f6565b92915050565b600060208284031215612938576129376128c0565b5b60006129468482850161290d565b91505092915050565b60008115159050919050565b6129648161294f565b82525050565b600060208201905061297f600083018461295b565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129d88261298f565b810181811067ffffffffffffffff821117156129f7576129f66129a0565b5b80604052505050565b6000612a0a6128b6565b9050612a1682826129cf565b919050565b600067ffffffffffffffff821115612a3657612a356129a0565b5b612a3f8261298f565b9050602081019050919050565b82818337600083830152505050565b6000612a6e612a6984612a1b565b612a00565b905082815260208101848484011115612a8a57612a8961298a565b5b612a95848285612a4c565b509392505050565b600082601f830112612ab257612ab1612985565b5b8135612ac2848260208601612a5b565b91505092915050565b600060208284031215612ae157612ae06128c0565b5b600082013567ffffffffffffffff811115612aff57612afe6128c5565b5b612b0b84828501612a9d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b4e578082015181840152602081019050612b33565b83811115612b5d576000848401525b50505050565b6000612b6e82612b14565b612b788185612b1f565b9350612b88818560208601612b30565b612b918161298f565b840191505092915050565b60006020820190508181036000830152612bb68184612b63565b905092915050565b6000819050919050565b612bd181612bbe565b8114612bdc57600080fd5b50565b600081359050612bee81612bc8565b92915050565b600060208284031215612c0a57612c096128c0565b5b6000612c1884828501612bdf565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4c82612c21565b9050919050565b612c5c81612c41565b82525050565b6000602082019050612c776000830184612c53565b92915050565b612c8681612c41565b8114612c9157600080fd5b50565b600081359050612ca381612c7d565b92915050565b60008060408385031215612cc057612cbf6128c0565b5b6000612cce85828601612c94565b9250506020612cdf85828601612bdf565b9150509250929050565b612cf281612bbe565b82525050565b6000602082019050612d0d6000830184612ce9565b92915050565b600060ff82169050919050565b612d2981612d13565b8114612d3457600080fd5b50565b600081359050612d4681612d20565b92915050565b600067ffffffffffffffff821115612d6757612d666129a0565b5b602082029050602081019050919050565b600080fd5b6000612d90612d8b84612d4c565b612a00565b90508083825260208201905060208402830185811115612db357612db2612d78565b5b835b81811015612dfa57803567ffffffffffffffff811115612dd857612dd7612985565b5b808601612de58982612a9d565b85526020850194505050602081019050612db5565b5050509392505050565b600082601f830112612e1957612e18612985565b5b8135612e29848260208601612d7d565b91505092915050565b60008060408385031215612e4957612e486128c0565b5b6000612e5785828601612d37565b925050602083013567ffffffffffffffff811115612e7857612e776128c5565b5b612e8485828601612e04565b9150509250929050565b600060208284031215612ea457612ea36128c0565b5b6000612eb284828501612c94565b91505092915050565b600067ffffffffffffffff821115612ed657612ed56129a0565b5b602082029050602081019050919050565b6000612efa612ef584612ebb565b612a00565b90508083825260208201905060208402830185811115612f1d57612f1c612d78565b5b835b81811015612f465780612f328882612c94565b845260208401935050602081019050612f1f565b5050509392505050565b600082601f830112612f6557612f64612985565b5b8135612f75848260208601612ee7565b91505092915050565b600060208284031215612f9457612f936128c0565b5b600082013567ffffffffffffffff811115612fb257612fb16128c5565b5b612fbe84828501612f50565b91505092915050565b600080600060608486031215612fe057612fdf6128c0565b5b6000612fee86828701612c94565b9350506020612fff86828701612c94565b925050604061301086828701612bdf565b9150509250925092565b6130238161294f565b811461302e57600080fd5b50565b6000813590506130408161301a565b92915050565b6000806040838503121561305d5761305c6128c0565b5b600061306b85828601612c94565b925050602061307c85828601613031565b9150509250929050565b600067ffffffffffffffff8211156130a1576130a06129a0565b5b6130aa8261298f565b9050602081019050919050565b60006130ca6130c584613086565b612a00565b9050828152602081018484840111156130e6576130e561298a565b5b6130f1848285612a4c565b509392505050565b600082601f83011261310e5761310d612985565b5b813561311e8482602086016130b7565b91505092915050565b60008060008060808587031215613141576131406128c0565b5b600061314f87828801612c94565b945050602061316087828801612c94565b935050604061317187828801612bdf565b925050606085013567ffffffffffffffff811115613192576131916128c5565b5b61319e878288016130f9565b91505092959194509250565b600080604083850312156131c1576131c06128c0565b5b60006131cf85828601612c94565b92505060206131e085828601612c94565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061323157607f821691505b60208210811415613245576132446131ea565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006132a7602183612b1f565b91506132b28261324b565b604082019050919050565b600060208201905081810360008301526132d68161329a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613339603e83612b1f565b9150613344826132dd565b604082019050919050565b600060208201905081810360008301526133688161332c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133a982612bbe565b91506133b483612bbe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133ed576133ec61336f565b5b828202905092915050565b7f4665657320446f6573204e6f74206d6174636821212121000000000000000000600082015250565b600061342e601783612b1f565b9150613439826133f8565b602082019050919050565b6000602082019050818103600083015261345d81613421565b9050919050565b7f555249206f72206e6674436e74206e6f74206d61746368656421212121000000600082015250565b600061349a601d83612b1f565b91506134a582613464565b602082019050919050565b600060208201905081810360008301526134c98161348d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061350a82612bbe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561353d5761353c61336f565b5b600182019050919050565b600061ffff82169050919050565b600061356182613548565b915061ffff8214156135765761357561336f565b5b600182019050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b60006135dd602e83612b1f565b91506135e882613581565b604082019050919050565b6000602082019050818103600083015261360c816135d0565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613649601883612b1f565b915061365482613613565b602082019050919050565b600060208201905081810360008301526136788161363c565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006136db602983612b1f565b91506136e68261367f565b604082019050919050565b6000602082019050818103600083015261370a816136ce565b9050919050565b7f546869732061646472657373206973206e6f742076616c696400000000000000600082015250565b6000613747601983612b1f565b915061375282613711565b602082019050919050565b600060208201905081810360008301526137768161373a565b9050919050565b600081905092915050565b50565b600061379860008361377d565b91506137a382613788565b600082019050919050565b60006137b98261378b565b9150819050919050565b7f5478206e6f742073756363657373000000000000000000000000000000000000600082015250565b60006137f9600e83612b1f565b9150613804826137c3565b602082019050919050565b60006020820190508181036000830152613828816137ec565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061388b602683612b1f565b91506138968261382f565b604082019050919050565b600060208201905081810360008301526138ba8161387e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138f7602083612b1f565b9150613902826138c1565b602082019050919050565b60006020820190508181036000830152613926816138ea565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613963602083612b1f565b915061396e8261392d565b602082019050919050565b6000602082019050818103600083015261399281613956565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006139cf601c83612b1f565b91506139da82613999565b602082019050919050565b600060208201905081810360008301526139fe816139c2565b9050919050565b6000613a1082612bbe565b9150613a1b83612bbe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a5057613a4f61336f565b5b828201905092915050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b6000613ab7602e83612b1f565b9150613ac282613a5b565b604082019050919050565b60006020820190508181036000830152613ae681613aaa565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613b49602583612b1f565b9150613b5482613aed565b604082019050919050565b60006020820190508181036000830152613b7881613b3c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bdb602483612b1f565b9150613be682613b7f565b604082019050919050565b60006020820190508181036000830152613c0a81613bce565b9050919050565b6000613c1c82612bbe565b9150613c2783612bbe565b925082821015613c3a57613c3961336f565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613c7b601983612b1f565b9150613c8682613c45565b602082019050919050565b60006020820190508181036000830152613caa81613c6e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613d0d603283612b1f565b9150613d1882613cb1565b604082019050919050565b60006020820190508181036000830152613d3c81613d00565b9050919050565b600081905092915050565b6000613d5982612b14565b613d638185613d43565b9350613d73818560208601612b30565b80840191505092915050565b6000613d8b8285613d4e565b9150613d978284613d4e565b91508190509392505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613dd9601483612b1f565b9150613de482613da3565b602082019050919050565b60006020820190508181036000830152613e0881613dcc565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613e45601083612b1f565b9150613e5082613e0f565b602082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613ea282613e7b565b613eac8185613e86565b9350613ebc818560208601612b30565b613ec58161298f565b840191505092915050565b6000608082019050613ee56000830187612c53565b613ef26020830186612c53565b613eff6040830185612ce9565b8181036060830152613f118184613e97565b905095945050505050565b600081519050613f2b816128f6565b92915050565b600060208284031215613f4757613f466128c0565b5b6000613f5584828501613f1c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f9882612bbe565b9150613fa383612bbe565b925082613fb357613fb2613f5e565b5b828204905092915050565b6000613fc982612bbe565b9150613fd483612bbe565b925082613fe457613fe3613f5e565b5b82820690509291505056fea26469706673582212203766d80fc903534b45c977154d380673d3389c2a02eb351c70e36c6e2878ba1764736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106101ee5760003560e01c806370a082311161010d578063b6a379ec116100a0578063d936547e1161006f578063d936547e1461069c578063e086e5ec146106d9578063e985e9c5146106f0578063f2fde38b1461072d578063fd25b2ba14610756576101ee565b8063b6a379ec146105e4578063b88d4fde1461060d578063bd8aa78014610636578063c87b56dd1461065f576101ee565b80638da5cb5b116100dc5780638da5cb5b1461053c57806395d89b4114610567578063a22cb46514610592578063a6f9dae1146105bb576101ee565b806370a08231146104a8578063715018a6146104e55780637d9a7a4c146104fc5780638456cb5914610525576101ee565b806321b8092e1161018557806342842e0e1161015457806342842e0e146103ee57806342966c68146104175780635c975abb146104405780636352211e1461046b576101ee565b806321b8092e1461035c578063232452161461038557806323b872dd146103ae5780633f4ba83a146103d7576101ee565b8063095ea7b3116101c1578063095ea7b3146102c15780630d39fc81146102ea5780630f4e57fd1461031557806312639f9f14610340576101ee565b806301ffc9a7146101f35780630675b7c61461023057806306fdde0314610259578063081812fc14610284575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612922565b610781565b604051610227919061296a565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612acb565b610863565b005b34801561026557600080fd5b5061026e610885565b60405161027b9190612b9c565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190612bf4565b610917565b6040516102b89190612c62565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612ca9565b61095d565b005b3480156102f657600080fd5b506102ff610a75565b60405161030c9190612cf8565b60405180910390f35b34801561032157600080fd5b5061032a610a7b565b6040516103379190612b9c565b60405180910390f35b61035a60048036038101906103559190612e32565b610b09565b005b34801561036857600080fd5b50610383600480360381019061037e9190612e8e565b610c83565b005b34801561039157600080fd5b506103ac60048036038101906103a79190612f7e565b610ccf565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190612fc7565b610d74565b005b3480156103e357600080fd5b506103ec610dd4565b005b3480156103fa57600080fd5b5061041560048036038101906104109190612fc7565b610de6565b005b34801561042357600080fd5b5061043e60048036038101906104399190612bf4565b610e06565b005b34801561044c57600080fd5b50610455610ea6565b604051610462919061296a565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d9190612bf4565b610ebd565b60405161049f9190612c62565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190612e8e565b610f6f565b6040516104dc9190612cf8565b60405180910390f35b3480156104f157600080fd5b506104fa611027565b005b34801561050857600080fd5b50610523600480360381019061051e9190612bf4565b61103b565b005b34801561053157600080fd5b5061053a61104d565b005b34801561054857600080fd5b5061055161105f565b60405161055e9190612c62565b60405180910390f35b34801561057357600080fd5b5061057c611089565b6040516105899190612b9c565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190613046565b61111b565b005b3480156105c757600080fd5b506105e260048036038101906105dd9190612e8e565b611131565b005b3480156105f057600080fd5b5061060b60048036038101906106069190612bf4565b611224565b005b34801561061957600080fd5b50610634600480360381019061062f9190613127565b611236565b005b34801561064257600080fd5b5061065d60048036038101906106589190612f7e565b611298565b005b34801561066b57600080fd5b5061068660048036038101906106819190612bf4565b61133d565b6040516106939190612b9c565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190612e8e565b61134f565b6040516106d0919061296a565b60405180910390f35b3480156106e557600080fd5b506106ee61136f565b005b3480156106fc57600080fd5b50610717600480360381019061071291906131aa565b611448565b604051610724919061296a565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190612e8e565b6114dc565b005b34801561076257600080fd5b5061076b611560565b6040516107789190612cf8565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085c575061085b82611566565b5b9050919050565b61086b6115d0565b80600890805190602001906108819291906127d3565b5050565b60606000805461089490613219565b80601f01602080910402602001604051908101604052809291908181526020018280546108c090613219565b801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b5050505050905090565b60006109228261164e565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096882610ebd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d0906132bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f8611699565b73ffffffffffffffffffffffffffffffffffffffff161480610a275750610a2681610a21611699565b611448565b5b610a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5d9061334f565b60405180910390fd5b610a7083836116a1565b505050565b600c5481565b60088054610a8890613219565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab490613219565b8015610b015780601f10610ad657610100808354040283529160200191610b01565b820191906000526020600020905b815481529060010190602001808311610ae457829003601f168201915b505050505081565b600060011515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610b6b57600c54610b6f565b600d545b8360ff16610b7d919061339e565b9050348114610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890613444565b60405180910390fd5b81518360ff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe906134b0565b60405180910390fd5b6000610c13600e61175a565b905060005b8460ff16811015610c7c57610c2d3383611768565b610c5182858381518110610c4457610c436134d0565b5b6020026020010151611942565b610c5b600e6119b6565b8180610c66906134ff565b9250508080610c74906134ff565b915050610c18565b5050505050565b610c8b6115d0565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cd76115d0565b60005b81518161ffff161015610d70576000600b6000848461ffff1681518110610d0457610d036134d0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d6890613556565b915050610cda565b5050565b610d85610d7f611699565b826119cc565b610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb906135f3565b60405180910390fd5b610dcf838383611a61565b505050565b610ddc6115d0565b610de4611cc8565b565b610e0183838360405180602001604052806000815250611236565b505050565b610e17610e11611699565b826119cc565b80610e5b5750610e2561105f565b73ffffffffffffffffffffffffffffffffffffffff16610e43611699565b73ffffffffffffffffffffffffffffffffffffffff16145b610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e91906135f3565b60405180910390fd5b610ea381611d2b565b50565b6000600760009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d9061365f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906136f1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102f6115d0565b6110396000611d37565b565b6110436115d0565b80600c8190555050565b6110556115d0565b61105d611dfd565b565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461109890613219565b80601f01602080910402602001604051908101604052809291908181526020018280546110c490613219565b80156111115780601f106110e657610100808354040283529160200191611111565b820191906000526020600020905b8154815290600101906020018083116110f457829003601f168201915b5050505050905090565b61112d611126611699565b8383611e60565b5050565b6111396115d0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061375d565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf36816040516112199190612c62565b60405180910390a150565b61122c6115d0565b80600d8190555050565b611247611241611699565b836119cc565b611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d906135f3565b60405180910390fd5b61129284848484611fcd565b50505050565b6112a06115d0565b60005b81518161ffff161015611339576001600b6000848461ffff16815181106112cd576112cc6134d0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061133190613556565b9150506112a3565b5050565b606061134882612029565b9050919050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6113776115d0565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516113bf906137ae565b60006040518083038185875af1925050503d80600081146113fc576040519150601f19603f3d011682016040523d82523d6000602084013e611401565b606091505b5050905080611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c9061380f565b60405180910390fd5b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114e46115d0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b906138a1565b60405180910390fd5b61155d81611d37565b50565b600d5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6115d8611699565b73ffffffffffffffffffffffffffffffffffffffff166115f661105f565b73ffffffffffffffffffffffffffffffffffffffff161461164c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116439061390d565b60405180910390fd5b565b6116578161213c565b611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d9061365f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661171483610ebd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90613979565b60405180910390fd5b6117e18161213c565b15611821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611818906139e5565b60405180910390fd5b61182d600083836121a8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461187d9190613a05565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461193e600083836121c0565b5050565b61194b8261213c565b61198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190613acd565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906119b19291906127d3565b505050565b6001816000016000828254019250508190555050565b6000806119d883610ebd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a1a5750611a198185611448565b5b80611a5857508373ffffffffffffffffffffffffffffffffffffffff16611a4084610917565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a8182610ebd565b73ffffffffffffffffffffffffffffffffffffffff1614611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace90613b5f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90613bf1565b60405180910390fd5b611b528383836121a8565b611b5d6000826116a1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bad9190613c11565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c049190613a05565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611cc38383836121c0565b505050565b611cd06121c5565b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611d14611699565b604051611d219190612c62565b60405180910390a1565b611d348161220e565b50565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e05612261565b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e49611699565b604051611e569190612c62565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613c91565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fc0919061296a565b60405180910390a3505050565b611fd8848484611a61565b611fe4848484846122ab565b612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201a90613d23565b60405180910390fd5b50505050565b60606120348261164e565b600060066000848152602001908152602001600020805461205490613219565b80601f016020809104026020016040519081016040528092919081815260200182805461208090613219565b80156120cd5780601f106120a2576101008083540402835291602001916120cd565b820191906000526020600020905b8154815290600101906020018083116120b057829003601f168201915b5050505050905060006120de612433565b90506000815114156120f4578192505050612137565b600082511115612129578082604051602001612111929190613d7f565b60405160208183030381529060405292505050612137565b612132846124c5565b925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6121b0612261565b6121bb83838361252d565b505050565b505050565b6121cd610ea6565b61220c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220390613def565b60405180910390fd5b565b61221781612532565b600060066000838152602001908152602001600020805461223790613219565b90501461225e5760066000828152602001908152602001600020600061225d9190612859565b5b50565b612269610ea6565b156122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090613e5b565b60405180910390fd5b565b60006122cc8473ffffffffffffffffffffffffffffffffffffffff1661264f565b15612426578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122f5611699565b8786866040518563ffffffff1660e01b81526004016123179493929190613ed0565b6020604051808303816000875af192505050801561235357506040513d601f19601f820116820180604052508101906123509190613f31565b60015b6123d6573d8060008114612383576040519150601f19603f3d011682016040523d82523d6000602084013e612388565b606091505b506000815114156123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c590613d23565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061242b565b600190505b949350505050565b60606008805461244290613219565b80601f016020809104026020016040519081016040528092919081815260200182805461246e90613219565b80156124bb5780601f10612490576101008083540402835291602001916124bb565b820191906000526020600020905b81548152906001019060200180831161249e57829003601f168201915b5050505050905090565b60606124d08261164e565b60006124da612433565b905060008151116124fa5760405180602001604052806000815250612525565b8061250484612672565b604051602001612515929190613d7f565b6040516020818303038152906040525b915050919050565b505050565b600061253d82610ebd565b905061254b816000846121a8565b6125566000836116a1565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a69190613c11565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461264b816000846121c0565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606060008214156126ba576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127ce565b600082905060005b600082146126ec5780806126d5906134ff565b915050600a826126e59190613f8d565b91506126c2565b60008167ffffffffffffffff811115612708576127076129a0565b5b6040519080825280601f01601f19166020018201604052801561273a5781602001600182028036833780820191505090505b5090505b600085146127c7576001826127539190613c11565b9150600a856127629190613fbe565b603061276e9190613a05565b60f81b818381518110612784576127836134d0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127c09190613f8d565b945061273e565b8093505050505b919050565b8280546127df90613219565b90600052602060002090601f0160209004810192826128015760008555612848565b82601f1061281a57805160ff1916838001178555612848565b82800160010185558215612848579182015b8281111561284757825182559160200191906001019061282c565b5b5090506128559190612899565b5090565b50805461286590613219565b6000825580601f106128775750612896565b601f0160209004906000526020600020908101906128959190612899565b5b50565b5b808211156128b257600081600090555060010161289a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128ff816128ca565b811461290a57600080fd5b50565b60008135905061291c816128f6565b92915050565b600060208284031215612938576129376128c0565b5b60006129468482850161290d565b91505092915050565b60008115159050919050565b6129648161294f565b82525050565b600060208201905061297f600083018461295b565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129d88261298f565b810181811067ffffffffffffffff821117156129f7576129f66129a0565b5b80604052505050565b6000612a0a6128b6565b9050612a1682826129cf565b919050565b600067ffffffffffffffff821115612a3657612a356129a0565b5b612a3f8261298f565b9050602081019050919050565b82818337600083830152505050565b6000612a6e612a6984612a1b565b612a00565b905082815260208101848484011115612a8a57612a8961298a565b5b612a95848285612a4c565b509392505050565b600082601f830112612ab257612ab1612985565b5b8135612ac2848260208601612a5b565b91505092915050565b600060208284031215612ae157612ae06128c0565b5b600082013567ffffffffffffffff811115612aff57612afe6128c5565b5b612b0b84828501612a9d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b4e578082015181840152602081019050612b33565b83811115612b5d576000848401525b50505050565b6000612b6e82612b14565b612b788185612b1f565b9350612b88818560208601612b30565b612b918161298f565b840191505092915050565b60006020820190508181036000830152612bb68184612b63565b905092915050565b6000819050919050565b612bd181612bbe565b8114612bdc57600080fd5b50565b600081359050612bee81612bc8565b92915050565b600060208284031215612c0a57612c096128c0565b5b6000612c1884828501612bdf565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4c82612c21565b9050919050565b612c5c81612c41565b82525050565b6000602082019050612c776000830184612c53565b92915050565b612c8681612c41565b8114612c9157600080fd5b50565b600081359050612ca381612c7d565b92915050565b60008060408385031215612cc057612cbf6128c0565b5b6000612cce85828601612c94565b9250506020612cdf85828601612bdf565b9150509250929050565b612cf281612bbe565b82525050565b6000602082019050612d0d6000830184612ce9565b92915050565b600060ff82169050919050565b612d2981612d13565b8114612d3457600080fd5b50565b600081359050612d4681612d20565b92915050565b600067ffffffffffffffff821115612d6757612d666129a0565b5b602082029050602081019050919050565b600080fd5b6000612d90612d8b84612d4c565b612a00565b90508083825260208201905060208402830185811115612db357612db2612d78565b5b835b81811015612dfa57803567ffffffffffffffff811115612dd857612dd7612985565b5b808601612de58982612a9d565b85526020850194505050602081019050612db5565b5050509392505050565b600082601f830112612e1957612e18612985565b5b8135612e29848260208601612d7d565b91505092915050565b60008060408385031215612e4957612e486128c0565b5b6000612e5785828601612d37565b925050602083013567ffffffffffffffff811115612e7857612e776128c5565b5b612e8485828601612e04565b9150509250929050565b600060208284031215612ea457612ea36128c0565b5b6000612eb284828501612c94565b91505092915050565b600067ffffffffffffffff821115612ed657612ed56129a0565b5b602082029050602081019050919050565b6000612efa612ef584612ebb565b612a00565b90508083825260208201905060208402830185811115612f1d57612f1c612d78565b5b835b81811015612f465780612f328882612c94565b845260208401935050602081019050612f1f565b5050509392505050565b600082601f830112612f6557612f64612985565b5b8135612f75848260208601612ee7565b91505092915050565b600060208284031215612f9457612f936128c0565b5b600082013567ffffffffffffffff811115612fb257612fb16128c5565b5b612fbe84828501612f50565b91505092915050565b600080600060608486031215612fe057612fdf6128c0565b5b6000612fee86828701612c94565b9350506020612fff86828701612c94565b925050604061301086828701612bdf565b9150509250925092565b6130238161294f565b811461302e57600080fd5b50565b6000813590506130408161301a565b92915050565b6000806040838503121561305d5761305c6128c0565b5b600061306b85828601612c94565b925050602061307c85828601613031565b9150509250929050565b600067ffffffffffffffff8211156130a1576130a06129a0565b5b6130aa8261298f565b9050602081019050919050565b60006130ca6130c584613086565b612a00565b9050828152602081018484840111156130e6576130e561298a565b5b6130f1848285612a4c565b509392505050565b600082601f83011261310e5761310d612985565b5b813561311e8482602086016130b7565b91505092915050565b60008060008060808587031215613141576131406128c0565b5b600061314f87828801612c94565b945050602061316087828801612c94565b935050604061317187828801612bdf565b925050606085013567ffffffffffffffff811115613192576131916128c5565b5b61319e878288016130f9565b91505092959194509250565b600080604083850312156131c1576131c06128c0565b5b60006131cf85828601612c94565b92505060206131e085828601612c94565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061323157607f821691505b60208210811415613245576132446131ea565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006132a7602183612b1f565b91506132b28261324b565b604082019050919050565b600060208201905081810360008301526132d68161329a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613339603e83612b1f565b9150613344826132dd565b604082019050919050565b600060208201905081810360008301526133688161332c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133a982612bbe565b91506133b483612bbe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133ed576133ec61336f565b5b828202905092915050565b7f4665657320446f6573204e6f74206d6174636821212121000000000000000000600082015250565b600061342e601783612b1f565b9150613439826133f8565b602082019050919050565b6000602082019050818103600083015261345d81613421565b9050919050565b7f555249206f72206e6674436e74206e6f74206d61746368656421212121000000600082015250565b600061349a601d83612b1f565b91506134a582613464565b602082019050919050565b600060208201905081810360008301526134c98161348d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061350a82612bbe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561353d5761353c61336f565b5b600182019050919050565b600061ffff82169050919050565b600061356182613548565b915061ffff8214156135765761357561336f565b5b600182019050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b60006135dd602e83612b1f565b91506135e882613581565b604082019050919050565b6000602082019050818103600083015261360c816135d0565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613649601883612b1f565b915061365482613613565b602082019050919050565b600060208201905081810360008301526136788161363c565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006136db602983612b1f565b91506136e68261367f565b604082019050919050565b6000602082019050818103600083015261370a816136ce565b9050919050565b7f546869732061646472657373206973206e6f742076616c696400000000000000600082015250565b6000613747601983612b1f565b915061375282613711565b602082019050919050565b600060208201905081810360008301526137768161373a565b9050919050565b600081905092915050565b50565b600061379860008361377d565b91506137a382613788565b600082019050919050565b60006137b98261378b565b9150819050919050565b7f5478206e6f742073756363657373000000000000000000000000000000000000600082015250565b60006137f9600e83612b1f565b9150613804826137c3565b602082019050919050565b60006020820190508181036000830152613828816137ec565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061388b602683612b1f565b91506138968261382f565b604082019050919050565b600060208201905081810360008301526138ba8161387e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138f7602083612b1f565b9150613902826138c1565b602082019050919050565b60006020820190508181036000830152613926816138ea565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613963602083612b1f565b915061396e8261392d565b602082019050919050565b6000602082019050818103600083015261399281613956565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006139cf601c83612b1f565b91506139da82613999565b602082019050919050565b600060208201905081810360008301526139fe816139c2565b9050919050565b6000613a1082612bbe565b9150613a1b83612bbe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a5057613a4f61336f565b5b828201905092915050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b6000613ab7602e83612b1f565b9150613ac282613a5b565b604082019050919050565b60006020820190508181036000830152613ae681613aaa565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613b49602583612b1f565b9150613b5482613aed565b604082019050919050565b60006020820190508181036000830152613b7881613b3c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bdb602483612b1f565b9150613be682613b7f565b604082019050919050565b60006020820190508181036000830152613c0a81613bce565b9050919050565b6000613c1c82612bbe565b9150613c2783612bbe565b925082821015613c3a57613c3961336f565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613c7b601983612b1f565b9150613c8682613c45565b602082019050919050565b60006020820190508181036000830152613caa81613c6e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613d0d603283612b1f565b9150613d1882613cb1565b604082019050919050565b60006020820190508181036000830152613d3c81613d00565b9050919050565b600081905092915050565b6000613d5982612b14565b613d638185613d43565b9350613d73818560208601612b30565b80840191505092915050565b6000613d8b8285613d4e565b9150613d978284613d4e565b91508190509392505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613dd9601483612b1f565b9150613de482613da3565b602082019050919050565b60006020820190508181036000830152613e0881613dcc565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613e45601083612b1f565b9150613e5082613e0f565b602082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613ea282613e7b565b613eac8185613e86565b9350613ebc818560208601612b30565b613ec58161298f565b840191505092915050565b6000608082019050613ee56000830187612c53565b613ef26020830186612c53565b613eff6040830185612ce9565b8181036060830152613f118184613e97565b905095945050505050565b600081519050613f2b816128f6565b92915050565b600060208284031215613f4757613f466128c0565b5b6000613f5584828501613f1c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f9882612bbe565b9150613fa383612bbe565b925082613fb357613fb2613f5e565b5b828204905092915050565b6000613fc982612bbe565b9150613fd483612bbe565b925082613fe457613fe3613f5e565b5b82820690509291505056fea26469706673582212203766d80fc903534b45c977154d380673d3389c2a02eb351c70e36c6e2878ba1764736f6c634300080b0033

Deployed Bytecode Sourcemap

43702:3219:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21231:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46125:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22158:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23671:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23188:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44054:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43835:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44334:604;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46242:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45753:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24371:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46853:65;;;;;;;;;;;;;:::i;:::-;;24778:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41868:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37842:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21869:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21600:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40619:103;;;;;;;;;;;;;:::i;:::-;;45933:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46784:61;;;;;;;;;;;;;:::i;:::-;;39971:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22327:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23914:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46568:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46027:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25034:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45577:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45389:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44004:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46382:178;;;;;;;;;;;;;:::i;:::-;;24140:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40877:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44098:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21231:305;21333:4;21385:25;21370:40;;;:11;:40;;;;:105;;;;21442:33;21427:48;;;:11;:48;;;;21370:105;:158;;;;21492:36;21516:11;21492:23;:36::i;:::-;21370:158;21350:178;;21231:305;;;:::o;46125:111::-;39857:13;:11;:13::i;:::-;46215::::1;46203:9;:25;;;;;;;;;;;;:::i;:::-;;46125:111:::0;:::o;22158:100::-;22212:13;22245:5;22238:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22158:100;:::o;23671:171::-;23747:7;23767:23;23782:7;23767:14;:23::i;:::-;23810:15;:24;23826:7;23810:24;;;;;;;;;;;;;;;;;;;;;23803:31;;23671:171;;;:::o;23188:417::-;23269:13;23285:23;23300:7;23285:14;:23::i;:::-;23269:39;;23333:5;23327:11;;:2;:11;;;;23319:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23427:5;23411:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23436:37;23453:5;23460:12;:10;:12::i;:::-;23436:16;:37::i;:::-;23411:62;23389:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;23576:21;23585:2;23589:7;23576:8;:21::i;:::-;23258:347;23188:417;;:::o;44054:37::-;;;;:::o;43835:47::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44334:604::-;44417:17;44471:4;44446:29;;:11;:23;44458:10;44446:23;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;:53;;44491:8;;44446:53;;;44478:10;;44446:53;44436:6;:64;;;;;;:::i;:::-;44417:83;;44530:9;44519;:20;44511:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44594:12;:19;44586:6;:27;;;44578:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44660:17;44680:25;:15;:23;:25::i;:::-;44660:45;;44721:9;44716:215;44740:6;44736:10;;:1;:10;44716:215;;;44768:28;44774:10;44786:9;44768:5;:28::i;:::-;44811:40;44824:9;44835:12;44848:1;44835:15;;;;;;;;:::i;:::-;;;;;;;;44811:12;:40::i;:::-;44866:27;:15;:25;:27::i;:::-;44908:11;;;;;:::i;:::-;;;;44748:3;;;;;:::i;:::-;;;;44716:215;;;;44406:532;;44334:604;;:::o;46242:132::-;39857:13;:11;:13::i;:::-;46348:18:::1;46328:17;;:38;;;;;;;;;;;;;;;;;;46242:132:::0;:::o;45753:174::-;39857:13;:11;:13::i;:::-;45834:8:::1;45830:90;45847:5;:12;45845:1;:14;;;45830:90;;;45903:5;45879:11;:21;45891:5;45897:1;45891:8;;;;;;;;;;:::i;:::-;;;;;;;;45879:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;45860:3;;;;;:::i;:::-;;;;45830:90;;;;45753:174:::0;:::o;24371:336::-;24566:41;24585:12;:10;:12::i;:::-;24599:7;24566:18;:41::i;:::-;24558:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;24671:28;24681:4;24687:2;24691:7;24671:9;:28::i;:::-;24371:336;;;:::o;46853:65::-;39857:13;:11;:13::i;:::-;46900:10:::1;:8;:10::i;:::-;46853:65::o:0;24778:185::-;24916:39;24933:4;24939:2;24943:7;24916:39;;;;;;;;;;;;:16;:39::i;:::-;24778:185;;;:::o;41868:268::-;41986:41;42005:12;:10;:12::i;:::-;42019:7;41986:18;:41::i;:::-;:66;;;;42045:7;:5;:7::i;:::-;42031:21;;:12;:10;:12::i;:::-;:21;;;41986:66;41978:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;42114:14;42120:7;42114:5;:14::i;:::-;41868:268;:::o;37842:86::-;37889:4;37913:7;;;;;;;;;;;37906:14;;37842:86;:::o;21869:222::-;21941:7;21961:13;21977:7;:16;21985:7;21977:16;;;;;;;;;;;;;;;;;;;;;21961:32;;22029:1;22012:19;;:5;:19;;;;22004:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22078:5;22071:12;;;21869:222;;;:::o;21600:207::-;21672:7;21717:1;21700:19;;:5;:19;;;;21692:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21783:9;:16;21793:5;21783:16;;;;;;;;;;;;;;;;21776:23;;21600:207;;;:::o;40619:103::-;39857:13;:11;:13::i;:::-;40684:30:::1;40711:1;40684:18;:30::i;:::-;40619:103::o:0;45933:86::-;39857:13;:11;:13::i;:::-;46007:4:::1;45996:8;:15;;;;45933:86:::0;:::o;46784:61::-;39857:13;:11;:13::i;:::-;46829:8:::1;:6;:8::i;:::-;46784:61::o:0;39971:87::-;40017:7;40044:6;;;;;;;;;;;40037:13;;39971:87;:::o;22327:104::-;22383:13;22416:7;22409:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22327:104;:::o;23914:155::-;24009:52;24028:12;:10;:12::i;:::-;24042:8;24052;24009:18;:52::i;:::-;23914:155;;:::o;46568:204::-;39857:13;:11;:13::i;:::-;46664:1:::1;46644:22;;:9;:22;;;;46636:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46716:9;46706:7;;:19;;;;;;;;;;;;;;;;;;46741:23;46754:9;46741:23;;;;;;:::i;:::-;;;;;;;;46568:204:::0;:::o;46027:90::-;39857:13;:11;:13::i;:::-;46105:4:::1;46092:10;:17;;;;46027:90:::0;:::o;25034:323::-;25208:41;25227:12;:10;:12::i;:::-;25241:7;25208:18;:41::i;:::-;25200:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25311:38;25325:4;25331:2;25335:7;25344:4;25311:13;:38::i;:::-;25034:323;;;;:::o;45577:167::-;39857:13;:11;:13::i;:::-;45652:8:::1;45648:89;45665:5;:12;45663:1;:14;;;45648:89;;;45721:4;45697:11;:21;45709:5;45715:1;45709:8;;;;;;;;;;:::i;:::-;;;;;;;;45697:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;45678:3;;;;;:::i;:::-;;;;45648:89;;;;45577:167:::0;:::o;45389:160::-;45480:13;45518:23;45533:7;45518:14;:23::i;:::-;45511:30;;45389:160;;;:::o;44004:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;46382:178::-;39857:13;:11;:13::i;:::-;46435:7:::1;46456:17;;;;;;;;;;;46448:31;;46487:21;46448:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46434:79;;;46532:2;46524:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;46422:138;46382:178::o:0;24140:164::-;24237:4;24261:18;:25;24280:5;24261:25;;;;;;;;;;;;;;;:35;24287:8;24261:35;;;;;;;;;;;;;;;;;;;;;;;;;24254:42;;24140:164;;;;:::o;40877:201::-;39857:13;:11;:13::i;:::-;40986:1:::1;40966:22;;:8;:22;;;;40958:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41042:28;41061:8;41042:18;:28::i;:::-;40877:201:::0;:::o;44098:40::-;;;;:::o;19765:157::-;19850:4;19889:25;19874:40;;;:11;:40;;;;19867:47;;19765:157;;;:::o;40136:132::-;40211:12;:10;:12::i;:::-;40200:23;;:7;:5;:7::i;:::-;:23;;;40192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40136:132::o;31646:135::-;31728:16;31736:7;31728;:16::i;:::-;31720:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;31646:135;:::o;16374:98::-;16427:7;16454:10;16447:17;;16374:98;:::o;30925:174::-;31027:2;31000:15;:24;31016:7;31000:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31083:7;31079:2;31045:46;;31054:23;31069:7;31054:14;:23::i;:::-;31045:46;;;;;;;;;;;;30925:174;;:::o;42929:114::-;42994:7;43021;:14;;;43014:21;;42929:114;;;:::o;28756:439::-;28850:1;28836:16;;:2;:16;;;;28828:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28909:16;28917:7;28909;:16::i;:::-;28908:17;28900:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28971:45;29000:1;29004:2;29008:7;28971:20;:45::i;:::-;29046:1;29029:9;:13;29039:2;29029:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29077:2;29058:7;:16;29066:7;29058:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29122:7;29118:2;29097:33;;29114:1;29097:33;;;;;;;;;;;;29143:44;29171:1;29175:2;29179:7;29143:19;:44::i;:::-;28756:439;;:::o;35605:217::-;35705:16;35713:7;35705;:16::i;:::-;35697:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35805:9;35783:10;:19;35794:7;35783:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;35605:217;;:::o;43051:127::-;43158:1;43140:7;:14;;;:19;;;;;;;;;;;43051:127;:::o;27158:264::-;27251:4;27268:13;27284:23;27299:7;27284:14;:23::i;:::-;27268:39;;27337:5;27326:16;;:7;:16;;;:52;;;;27346:32;27363:5;27370:7;27346:16;:32::i;:::-;27326:52;:87;;;;27406:7;27382:31;;:20;27394:7;27382:11;:20::i;:::-;:31;;;27326:87;27318:96;;;27158:264;;;;:::o;30181:625::-;30340:4;30313:31;;:23;30328:7;30313:14;:23::i;:::-;:31;;;30305:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30419:1;30405:16;;:2;:16;;;;30397:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30475:39;30496:4;30502:2;30506:7;30475:20;:39::i;:::-;30579:29;30596:1;30600:7;30579:8;:29::i;:::-;30640:1;30621:9;:15;30631:4;30621:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30669:1;30652:9;:13;30662:2;30652:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30700:2;30681:7;:16;30689:7;30681:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30739:7;30735:2;30720:27;;30729:4;30720:27;;;;;;;;;;;;30760:38;30780:4;30786:2;30790:7;30760:19;:38::i;:::-;30181:625;;;:::o;38697:120::-;37706:16;:14;:16::i;:::-;38766:5:::1;38756:7;;:15;;;;;;;;;;;;;;;;;;38787:22;38796:12;:10;:12::i;:::-;38787:22;;;;;;:::i;:::-;;;;;;;;38697:120::o:0;45266:115::-;45353:20;45365:7;45353:11;:20::i;:::-;45266:115;:::o;41238:191::-;41312:16;41331:6;;;;;;;;;;;41312:25;;41357:8;41348:6;;:17;;;;;;;;;;;;;;;;;;41412:8;41381:40;;41402:8;41381:40;;;;;;;;;;;;41301:128;41238:191;:::o;38438:118::-;37447:19;:17;:19::i;:::-;38508:4:::1;38498:7;;:14;;;;;;;;;;;;;;;;;;38528:20;38535:12;:10;:12::i;:::-;38528:20;;;;;;:::i;:::-;;;;;;;;38438:118::o:0;31242:315::-;31397:8;31388:17;;:5;:17;;;;31380:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31484:8;31446:18;:25;31465:5;31446:25;;;;;;;;;;;;;;;:35;31472:8;31446:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31530:8;31508:41;;31523:5;31508:41;;;31540:8;31508:41;;;;;;:::i;:::-;;;;;;;;31242:315;;;:::o;26238:313::-;26394:28;26404:4;26410:2;26414:7;26394:9;:28::i;:::-;26441:47;26464:4;26470:2;26474:7;26483:4;26441:22;:47::i;:::-;26433:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26238:313;;;;:::o;34825:624::-;34898:13;34924:23;34939:7;34924:14;:23::i;:::-;34960;34986:10;:19;34997:7;34986:19;;;;;;;;;;;34960:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35016:18;35037:10;:8;:10::i;:::-;35016:31;;35145:1;35129:4;35123:18;:23;35119:72;;;35170:9;35163:16;;;;;;35119:72;35321:1;35301:9;35295:23;:27;35291:108;;;35370:4;35376:9;35353:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35339:48;;;;;;35291:108;35418:23;35433:7;35418:14;:23::i;:::-;35411:30;;;;34825:624;;;;:::o;26864:127::-;26929:4;26981:1;26953:30;;:7;:16;26961:7;26953:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26946:37;;26864:127;;;:::o;45084:174::-;37447:19;:17;:19::i;:::-;45205:45:::1;45232:4;45238:2;45242:7;45205:26;:45::i;:::-;45084:174:::0;;;:::o;34281:125::-;;;;:::o;38186:108::-;38253:8;:6;:8::i;:::-;38245:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;38186:108::o;36047:206::-;36116:20;36128:7;36116:11;:20::i;:::-;36190:1;36159:10;:19;36170:7;36159:19;;;;;;;;;;;36153:33;;;;;:::i;:::-;;;:38;36149:97;;36215:10;:19;36226:7;36215:19;;;;;;;;;;;;36208:26;;;;:::i;:::-;36149:97;36047:206;:::o;38001:108::-;38072:8;:6;:8::i;:::-;38071:9;38063:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;38001:108::o;32345:853::-;32499:4;32520:15;:2;:13;;;:15::i;:::-;32516:675;;;32572:2;32556:36;;;32593:12;:10;:12::i;:::-;32607:4;32613:7;32622:4;32556:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32552:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32814:1;32797:6;:13;:18;32793:328;;;32840:60;;;;;;;;;;:::i;:::-;;;;;;;;32793:328;33071:6;33065:13;33056:6;33052:2;33048:15;33041:38;32552:584;32688:41;;;32678:51;;;:6;:51;;;;32671:58;;;;;32516:675;33175:4;33168:11;;32345:853;;;;;;;:::o;44973:103::-;45026:13;45059:9;45052:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44973:103;:::o;22502:281::-;22575:13;22601:23;22616:7;22601:14;:23::i;:::-;22637:21;22661:10;:8;:10::i;:::-;22637:34;;22713:1;22695:7;22689:21;:25;:86;;;;;;;;;;;;;;;;;22741:7;22750:18;:7;:16;:18::i;:::-;22724:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22689:86;22682:93;;;22502:281;;;:::o;33770:126::-;;;;:::o;29424:420::-;29484:13;29500:23;29515:7;29500:14;:23::i;:::-;29484:39;;29536:48;29557:5;29572:1;29576:7;29536:20;:48::i;:::-;29625:29;29642:1;29646:7;29625:8;:29::i;:::-;29687:1;29667:9;:16;29677:5;29667:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29706:7;:16;29714:7;29706:16;;;;;;;;;;;;29699:23;;;;;;;;;;;29768:7;29764:1;29740:36;;29749:5;29740:36;;;;;;;;;;;;29789:47;29809:5;29824:1;29828:7;29789:19;:47::i;:::-;29473:371;29424:420;:::o;8460:326::-;8520:4;8777:1;8755:7;:19;;;:23;8748:30;;8460:326;;;:::o;16933:723::-;16989:13;17219:1;17210:5;:10;17206:53;;;17237:10;;;;;;;;;;;;;;;;;;;;;17206:53;17269:12;17284:5;17269:20;;17300:14;17325:78;17340:1;17332:4;:9;17325:78;;17358:8;;;;;:::i;:::-;;;;17389:2;17381:10;;;;;:::i;:::-;;;17325:78;;;17413:19;17445:6;17435:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17413:39;;17463:154;17479:1;17470:5;:10;17463:154;;17507:1;17497:11;;;;;:::i;:::-;;;17574:2;17566:5;:10;;;;:::i;:::-;17553:2;:24;;;;:::i;:::-;17540:39;;17523:6;17530;17523:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17603:2;17594:11;;;;;:::i;:::-;;;17463:154;;;17641:6;17627:21;;;;;16933:723;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:117::-;1627:1;1624;1617:12;1641:117;1750:1;1747;1740:12;1764:102;1805:6;1856:2;1852:7;1847:2;1840:5;1836:14;1832:28;1822:38;;1764:102;;;:::o;1872:180::-;1920:77;1917:1;1910:88;2017:4;2014:1;2007:15;2041:4;2038:1;2031:15;2058:281;2141:27;2163:4;2141:27;:::i;:::-;2133:6;2129:40;2271:6;2259:10;2256:22;2235:18;2223:10;2220:34;2217:62;2214:88;;;2282:18;;:::i;:::-;2214:88;2322:10;2318:2;2311:22;2101:238;2058:281;;:::o;2345:129::-;2379:6;2406:20;;:::i;:::-;2396:30;;2435:33;2463:4;2455:6;2435:33;:::i;:::-;2345:129;;;:::o;2480:308::-;2542:4;2632:18;2624:6;2621:30;2618:56;;;2654:18;;:::i;:::-;2618:56;2692:29;2714:6;2692:29;:::i;:::-;2684:37;;2776:4;2770;2766:15;2758:23;;2480:308;;;:::o;2794:154::-;2878:6;2873:3;2868;2855:30;2940:1;2931:6;2926:3;2922:16;2915:27;2794:154;;;:::o;2954:412::-;3032:5;3057:66;3073:49;3115:6;3073:49;:::i;:::-;3057:66;:::i;:::-;3048:75;;3146:6;3139:5;3132:21;3184:4;3177:5;3173:16;3222:3;3213:6;3208:3;3204:16;3201:25;3198:112;;;3229:79;;:::i;:::-;3198:112;3319:41;3353:6;3348:3;3343;3319:41;:::i;:::-;3038:328;2954:412;;;;;:::o;3386:340::-;3442:5;3491:3;3484:4;3476:6;3472:17;3468:27;3458:122;;3499:79;;:::i;:::-;3458:122;3616:6;3603:20;3641:79;3716:3;3708:6;3701:4;3693:6;3689:17;3641:79;:::i;:::-;3632:88;;3448:278;3386:340;;;;:::o;3732:509::-;3801:6;3850:2;3838:9;3829:7;3825:23;3821:32;3818:119;;;3856:79;;:::i;:::-;3818:119;4004:1;3993:9;3989:17;3976:31;4034:18;4026:6;4023:30;4020:117;;;4056:79;;:::i;:::-;4020:117;4161:63;4216:7;4207:6;4196:9;4192:22;4161:63;:::i;:::-;4151:73;;3947:287;3732:509;;;;:::o;4247:99::-;4299:6;4333:5;4327:12;4317:22;;4247:99;;;:::o;4352:169::-;4436:11;4470:6;4465:3;4458:19;4510:4;4505:3;4501:14;4486:29;;4352:169;;;;:::o;4527:307::-;4595:1;4605:113;4619:6;4616:1;4613:13;4605:113;;;4704:1;4699:3;4695:11;4689:18;4685:1;4680:3;4676:11;4669:39;4641:2;4638:1;4634:10;4629:15;;4605:113;;;4736:6;4733:1;4730:13;4727:101;;;4816:1;4807:6;4802:3;4798:16;4791:27;4727:101;4576:258;4527:307;;;:::o;4840:364::-;4928:3;4956:39;4989:5;4956:39;:::i;:::-;5011:71;5075:6;5070:3;5011:71;:::i;:::-;5004:78;;5091:52;5136:6;5131:3;5124:4;5117:5;5113:16;5091:52;:::i;:::-;5168:29;5190:6;5168:29;:::i;:::-;5163:3;5159:39;5152:46;;4932:272;4840:364;;;;:::o;5210:313::-;5323:4;5361:2;5350:9;5346:18;5338:26;;5410:9;5404:4;5400:20;5396:1;5385:9;5381:17;5374:47;5438:78;5511:4;5502:6;5438:78;:::i;:::-;5430:86;;5210:313;;;;:::o;5529:77::-;5566:7;5595:5;5584:16;;5529:77;;;:::o;5612:122::-;5685:24;5703:5;5685:24;:::i;:::-;5678:5;5675:35;5665:63;;5724:1;5721;5714:12;5665:63;5612:122;:::o;5740:139::-;5786:5;5824:6;5811:20;5802:29;;5840:33;5867:5;5840:33;:::i;:::-;5740:139;;;;:::o;5885:329::-;5944:6;5993:2;5981:9;5972:7;5968:23;5964:32;5961:119;;;5999:79;;:::i;:::-;5961:119;6119:1;6144:53;6189:7;6180:6;6169:9;6165:22;6144:53;:::i;:::-;6134:63;;6090:117;5885:329;;;;:::o;6220:126::-;6257:7;6297:42;6290:5;6286:54;6275:65;;6220:126;;;:::o;6352:96::-;6389:7;6418:24;6436:5;6418:24;:::i;:::-;6407:35;;6352:96;;;:::o;6454:118::-;6541:24;6559:5;6541:24;:::i;:::-;6536:3;6529:37;6454:118;;:::o;6578:222::-;6671:4;6709:2;6698:9;6694:18;6686:26;;6722:71;6790:1;6779:9;6775:17;6766:6;6722:71;:::i;:::-;6578:222;;;;:::o;6806:122::-;6879:24;6897:5;6879:24;:::i;:::-;6872:5;6869:35;6859:63;;6918:1;6915;6908:12;6859:63;6806:122;:::o;6934:139::-;6980:5;7018:6;7005:20;6996:29;;7034:33;7061:5;7034:33;:::i;:::-;6934:139;;;;:::o;7079:474::-;7147:6;7155;7204:2;7192:9;7183:7;7179:23;7175:32;7172:119;;;7210:79;;:::i;:::-;7172:119;7330:1;7355:53;7400:7;7391:6;7380:9;7376:22;7355:53;:::i;:::-;7345:63;;7301:117;7457:2;7483:53;7528:7;7519:6;7508:9;7504:22;7483:53;:::i;:::-;7473:63;;7428:118;7079:474;;;;;:::o;7559:118::-;7646:24;7664:5;7646:24;:::i;:::-;7641:3;7634:37;7559:118;;:::o;7683:222::-;7776:4;7814:2;7803:9;7799:18;7791:26;;7827:71;7895:1;7884:9;7880:17;7871:6;7827:71;:::i;:::-;7683:222;;;;:::o;7911:86::-;7946:7;7986:4;7979:5;7975:16;7964:27;;7911:86;;;:::o;8003:118::-;8074:22;8090:5;8074:22;:::i;:::-;8067:5;8064:33;8054:61;;8111:1;8108;8101:12;8054:61;8003:118;:::o;8127:135::-;8171:5;8209:6;8196:20;8187:29;;8225:31;8250:5;8225:31;:::i;:::-;8127:135;;;;:::o;8268:321::-;8355:4;8445:18;8437:6;8434:30;8431:56;;;8467:18;;:::i;:::-;8431:56;8517:4;8509:6;8505:17;8497:25;;8577:4;8571;8567:15;8559:23;;8268:321;;;:::o;8595:117::-;8704:1;8701;8694:12;8734:945;8840:5;8865:91;8881:74;8948:6;8881:74;:::i;:::-;8865:91;:::i;:::-;8856:100;;8976:5;9005:6;8998:5;8991:21;9039:4;9032:5;9028:16;9021:23;;9092:4;9084:6;9080:17;9072:6;9068:30;9121:3;9113:6;9110:15;9107:122;;;9140:79;;:::i;:::-;9107:122;9255:6;9238:435;9272:6;9267:3;9264:15;9238:435;;;9361:3;9348:17;9397:18;9384:11;9381:35;9378:122;;;9419:79;;:::i;:::-;9378:122;9543:11;9535:6;9531:24;9581:47;9624:3;9612:10;9581:47;:::i;:::-;9576:3;9569:60;9658:4;9653:3;9649:14;9642:21;;9314:359;;9298:4;9293:3;9289:14;9282:21;;9238:435;;;9242:21;8846:833;;8734:945;;;;;:::o;9701:390::-;9782:5;9831:3;9824:4;9816:6;9812:17;9808:27;9798:122;;9839:79;;:::i;:::-;9798:122;9956:6;9943:20;9981:104;10081:3;10073:6;10066:4;10058:6;10054:17;9981:104;:::i;:::-;9972:113;;9788:303;9701:390;;;;:::o;10097:700::-;10198:6;10206;10255:2;10243:9;10234:7;10230:23;10226:32;10223:119;;;10261:79;;:::i;:::-;10223:119;10381:1;10406:51;10449:7;10440:6;10429:9;10425:22;10406:51;:::i;:::-;10396:61;;10352:115;10534:2;10523:9;10519:18;10506:32;10565:18;10557:6;10554:30;10551:117;;;10587:79;;:::i;:::-;10551:117;10692:88;10772:7;10763:6;10752:9;10748:22;10692:88;:::i;:::-;10682:98;;10477:313;10097:700;;;;;:::o;10803:329::-;10862:6;10911:2;10899:9;10890:7;10886:23;10882:32;10879:119;;;10917:79;;:::i;:::-;10879:119;11037:1;11062:53;11107:7;11098:6;11087:9;11083:22;11062:53;:::i;:::-;11052:63;;11008:117;10803:329;;;;:::o;11138:311::-;11215:4;11305:18;11297:6;11294:30;11291:56;;;11327:18;;:::i;:::-;11291:56;11377:4;11369:6;11365:17;11357:25;;11437:4;11431;11427:15;11419:23;;11138:311;;;:::o;11472:710::-;11568:5;11593:81;11609:64;11666:6;11609:64;:::i;:::-;11593:81;:::i;:::-;11584:90;;11694:5;11723:6;11716:5;11709:21;11757:4;11750:5;11746:16;11739:23;;11810:4;11802:6;11798:17;11790:6;11786:30;11839:3;11831:6;11828:15;11825:122;;;11858:79;;:::i;:::-;11825:122;11973:6;11956:220;11990:6;11985:3;11982:15;11956:220;;;12065:3;12094:37;12127:3;12115:10;12094:37;:::i;:::-;12089:3;12082:50;12161:4;12156:3;12152:14;12145:21;;12032:144;12016:4;12011:3;12007:14;12000:21;;11956:220;;;11960:21;11574:608;;11472:710;;;;;:::o;12205:370::-;12276:5;12325:3;12318:4;12310:6;12306:17;12302:27;12292:122;;12333:79;;:::i;:::-;12292:122;12450:6;12437:20;12475:94;12565:3;12557:6;12550:4;12542:6;12538:17;12475:94;:::i;:::-;12466:103;;12282:293;12205:370;;;;:::o;12581:539::-;12665:6;12714:2;12702:9;12693:7;12689:23;12685:32;12682:119;;;12720:79;;:::i;:::-;12682:119;12868:1;12857:9;12853:17;12840:31;12898:18;12890:6;12887:30;12884:117;;;12920:79;;:::i;:::-;12884:117;13025:78;13095:7;13086:6;13075:9;13071:22;13025:78;:::i;:::-;13015:88;;12811:302;12581:539;;;;:::o;13126:619::-;13203:6;13211;13219;13268:2;13256:9;13247:7;13243:23;13239:32;13236:119;;;13274:79;;:::i;:::-;13236:119;13394:1;13419:53;13464:7;13455:6;13444:9;13440:22;13419:53;:::i;:::-;13409:63;;13365:117;13521:2;13547:53;13592:7;13583:6;13572:9;13568:22;13547:53;:::i;:::-;13537:63;;13492:118;13649:2;13675:53;13720:7;13711:6;13700:9;13696:22;13675:53;:::i;:::-;13665:63;;13620:118;13126:619;;;;;:::o;13751:116::-;13821:21;13836:5;13821:21;:::i;:::-;13814:5;13811:32;13801:60;;13857:1;13854;13847:12;13801:60;13751:116;:::o;13873:133::-;13916:5;13954:6;13941:20;13932:29;;13970:30;13994:5;13970:30;:::i;:::-;13873:133;;;;:::o;14012:468::-;14077:6;14085;14134:2;14122:9;14113:7;14109:23;14105:32;14102:119;;;14140:79;;:::i;:::-;14102:119;14260:1;14285:53;14330:7;14321:6;14310:9;14306:22;14285:53;:::i;:::-;14275:63;;14231:117;14387:2;14413:50;14455:7;14446:6;14435:9;14431:22;14413:50;:::i;:::-;14403:60;;14358:115;14012:468;;;;;:::o;14486:307::-;14547:4;14637:18;14629:6;14626:30;14623:56;;;14659:18;;:::i;:::-;14623:56;14697:29;14719:6;14697:29;:::i;:::-;14689:37;;14781:4;14775;14771:15;14763:23;;14486:307;;;:::o;14799:410::-;14876:5;14901:65;14917:48;14958:6;14917:48;:::i;:::-;14901:65;:::i;:::-;14892:74;;14989:6;14982:5;14975:21;15027:4;15020:5;15016:16;15065:3;15056:6;15051:3;15047:16;15044:25;15041:112;;;15072:79;;:::i;:::-;15041:112;15162:41;15196:6;15191:3;15186;15162:41;:::i;:::-;14882:327;14799:410;;;;;:::o;15228:338::-;15283:5;15332:3;15325:4;15317:6;15313:17;15309:27;15299:122;;15340:79;;:::i;:::-;15299:122;15457:6;15444:20;15482:78;15556:3;15548:6;15541:4;15533:6;15529:17;15482:78;:::i;:::-;15473:87;;15289:277;15228:338;;;;:::o;15572:943::-;15667:6;15675;15683;15691;15740:3;15728:9;15719:7;15715:23;15711:33;15708:120;;;15747:79;;:::i;:::-;15708:120;15867:1;15892:53;15937:7;15928:6;15917:9;15913:22;15892:53;:::i;:::-;15882:63;;15838:117;15994:2;16020:53;16065:7;16056:6;16045:9;16041:22;16020:53;:::i;:::-;16010:63;;15965:118;16122:2;16148:53;16193:7;16184:6;16173:9;16169:22;16148:53;:::i;:::-;16138:63;;16093:118;16278:2;16267:9;16263:18;16250:32;16309:18;16301:6;16298:30;16295:117;;;16331:79;;:::i;:::-;16295:117;16436:62;16490:7;16481:6;16470:9;16466:22;16436:62;:::i;:::-;16426:72;;16221:287;15572:943;;;;;;;:::o;16521:474::-;16589:6;16597;16646:2;16634:9;16625:7;16621:23;16617:32;16614:119;;;16652:79;;:::i;:::-;16614:119;16772:1;16797:53;16842:7;16833:6;16822:9;16818:22;16797:53;:::i;:::-;16787:63;;16743:117;16899:2;16925:53;16970:7;16961:6;16950:9;16946:22;16925:53;:::i;:::-;16915:63;;16870:118;16521:474;;;;;:::o;17001:180::-;17049:77;17046:1;17039:88;17146:4;17143:1;17136:15;17170:4;17167:1;17160:15;17187:320;17231:6;17268:1;17262:4;17258:12;17248:22;;17315:1;17309:4;17305:12;17336:18;17326:81;;17392:4;17384:6;17380:17;17370:27;;17326:81;17454:2;17446:6;17443:14;17423:18;17420:38;17417:84;;;17473:18;;:::i;:::-;17417:84;17238:269;17187:320;;;:::o;17513:220::-;17653:34;17649:1;17641:6;17637:14;17630:58;17722:3;17717:2;17709:6;17705:15;17698:28;17513:220;:::o;17739:366::-;17881:3;17902:67;17966:2;17961:3;17902:67;:::i;:::-;17895:74;;17978:93;18067:3;17978:93;:::i;:::-;18096:2;18091:3;18087:12;18080:19;;17739:366;;;:::o;18111:419::-;18277:4;18315:2;18304:9;18300:18;18292:26;;18364:9;18358:4;18354:20;18350:1;18339:9;18335:17;18328:47;18392:131;18518:4;18392:131;:::i;:::-;18384:139;;18111:419;;;:::o;18536:249::-;18676:34;18672:1;18664:6;18660:14;18653:58;18745:32;18740:2;18732:6;18728:15;18721:57;18536:249;:::o;18791:366::-;18933:3;18954:67;19018:2;19013:3;18954:67;:::i;:::-;18947:74;;19030:93;19119:3;19030:93;:::i;:::-;19148:2;19143:3;19139:12;19132:19;;18791:366;;;:::o;19163:419::-;19329:4;19367:2;19356:9;19352:18;19344:26;;19416:9;19410:4;19406:20;19402:1;19391:9;19387:17;19380:47;19444:131;19570:4;19444:131;:::i;:::-;19436:139;;19163:419;;;:::o;19588:180::-;19636:77;19633:1;19626:88;19733:4;19730:1;19723:15;19757:4;19754:1;19747:15;19774:348;19814:7;19837:20;19855:1;19837:20;:::i;:::-;19832:25;;19871:20;19889:1;19871:20;:::i;:::-;19866:25;;20059:1;19991:66;19987:74;19984:1;19981:81;19976:1;19969:9;19962:17;19958:105;19955:131;;;20066:18;;:::i;:::-;19955:131;20114:1;20111;20107:9;20096:20;;19774:348;;;;:::o;20128:173::-;20268:25;20264:1;20256:6;20252:14;20245:49;20128:173;:::o;20307:366::-;20449:3;20470:67;20534:2;20529:3;20470:67;:::i;:::-;20463:74;;20546:93;20635:3;20546:93;:::i;:::-;20664:2;20659:3;20655:12;20648:19;;20307:366;;;:::o;20679:419::-;20845:4;20883:2;20872:9;20868:18;20860:26;;20932:9;20926:4;20922:20;20918:1;20907:9;20903:17;20896:47;20960:131;21086:4;20960:131;:::i;:::-;20952:139;;20679:419;;;:::o;21104:179::-;21244:31;21240:1;21232:6;21228:14;21221:55;21104:179;:::o;21289:366::-;21431:3;21452:67;21516:2;21511:3;21452:67;:::i;:::-;21445:74;;21528:93;21617:3;21528:93;:::i;:::-;21646:2;21641:3;21637:12;21630:19;;21289:366;;;:::o;21661:419::-;21827:4;21865:2;21854:9;21850:18;21842:26;;21914:9;21908:4;21904:20;21900:1;21889:9;21885:17;21878:47;21942:131;22068:4;21942:131;:::i;:::-;21934:139;;21661:419;;;:::o;22086:180::-;22134:77;22131:1;22124:88;22231:4;22228:1;22221:15;22255:4;22252:1;22245:15;22272:233;22311:3;22334:24;22352:5;22334:24;:::i;:::-;22325:33;;22380:66;22373:5;22370:77;22367:103;;;22450:18;;:::i;:::-;22367:103;22497:1;22490:5;22486:13;22479:20;;22272:233;;;:::o;22511:89::-;22547:7;22587:6;22580:5;22576:18;22565:29;;22511:89;;;:::o;22606:171::-;22644:3;22667:23;22684:5;22667:23;:::i;:::-;22658:32;;22712:6;22705:5;22702:17;22699:43;;;22722:18;;:::i;:::-;22699:43;22769:1;22762:5;22758:13;22751:20;;22606:171;;;:::o;22783:233::-;22923:34;22919:1;22911:6;22907:14;22900:58;22992:16;22987:2;22979:6;22975:15;22968:41;22783:233;:::o;23022:366::-;23164:3;23185:67;23249:2;23244:3;23185:67;:::i;:::-;23178:74;;23261:93;23350:3;23261:93;:::i;:::-;23379:2;23374:3;23370:12;23363:19;;23022:366;;;:::o;23394:419::-;23560:4;23598:2;23587:9;23583:18;23575:26;;23647:9;23641:4;23637:20;23633:1;23622:9;23618:17;23611:47;23675:131;23801:4;23675:131;:::i;:::-;23667:139;;23394:419;;;:::o;23819:174::-;23959:26;23955:1;23947:6;23943:14;23936:50;23819:174;:::o;23999:366::-;24141:3;24162:67;24226:2;24221:3;24162:67;:::i;:::-;24155:74;;24238:93;24327:3;24238:93;:::i;:::-;24356:2;24351:3;24347:12;24340:19;;23999:366;;;:::o;24371:419::-;24537:4;24575:2;24564:9;24560:18;24552:26;;24624:9;24618:4;24614:20;24610:1;24599:9;24595:17;24588:47;24652:131;24778:4;24652:131;:::i;:::-;24644:139;;24371:419;;;:::o;24796:228::-;24936:34;24932:1;24924:6;24920:14;24913:58;25005:11;25000:2;24992:6;24988:15;24981:36;24796:228;:::o;25030:366::-;25172:3;25193:67;25257:2;25252:3;25193:67;:::i;:::-;25186:74;;25269:93;25358:3;25269:93;:::i;:::-;25387:2;25382:3;25378:12;25371:19;;25030:366;;;:::o;25402:419::-;25568:4;25606:2;25595:9;25591:18;25583:26;;25655:9;25649:4;25645:20;25641:1;25630:9;25626:17;25619:47;25683:131;25809:4;25683:131;:::i;:::-;25675:139;;25402:419;;;:::o;25827:175::-;25967:27;25963:1;25955:6;25951:14;25944:51;25827:175;:::o;26008:366::-;26150:3;26171:67;26235:2;26230:3;26171:67;:::i;:::-;26164:74;;26247:93;26336:3;26247:93;:::i;:::-;26365:2;26360:3;26356:12;26349:19;;26008:366;;;:::o;26380:419::-;26546:4;26584:2;26573:9;26569:18;26561:26;;26633:9;26627:4;26623:20;26619:1;26608:9;26604:17;26597:47;26661:131;26787:4;26661:131;:::i;:::-;26653:139;;26380:419;;;:::o;26805:147::-;26906:11;26943:3;26928:18;;26805:147;;;;:::o;26958:114::-;;:::o;27078:398::-;27237:3;27258:83;27339:1;27334:3;27258:83;:::i;:::-;27251:90;;27350:93;27439:3;27350:93;:::i;:::-;27468:1;27463:3;27459:11;27452:18;;27078:398;;;:::o;27482:379::-;27666:3;27688:147;27831:3;27688:147;:::i;:::-;27681:154;;27852:3;27845:10;;27482:379;;;:::o;27867:164::-;28007:16;28003:1;27995:6;27991:14;27984:40;27867:164;:::o;28037:366::-;28179:3;28200:67;28264:2;28259:3;28200:67;:::i;:::-;28193:74;;28276:93;28365:3;28276:93;:::i;:::-;28394:2;28389:3;28385:12;28378:19;;28037:366;;;:::o;28409:419::-;28575:4;28613:2;28602:9;28598:18;28590:26;;28662:9;28656:4;28652:20;28648:1;28637:9;28633:17;28626:47;28690:131;28816:4;28690:131;:::i;:::-;28682:139;;28409:419;;;:::o;28834:225::-;28974:34;28970:1;28962:6;28958:14;28951:58;29043:8;29038:2;29030:6;29026:15;29019:33;28834:225;:::o;29065:366::-;29207:3;29228:67;29292:2;29287:3;29228:67;:::i;:::-;29221:74;;29304:93;29393:3;29304:93;:::i;:::-;29422:2;29417:3;29413:12;29406:19;;29065:366;;;:::o;29437:419::-;29603:4;29641:2;29630:9;29626:18;29618:26;;29690:9;29684:4;29680:20;29676:1;29665:9;29661:17;29654:47;29718:131;29844:4;29718:131;:::i;:::-;29710:139;;29437:419;;;:::o;29862:182::-;30002:34;29998:1;29990:6;29986:14;29979:58;29862:182;:::o;30050:366::-;30192:3;30213:67;30277:2;30272:3;30213:67;:::i;:::-;30206:74;;30289:93;30378:3;30289:93;:::i;:::-;30407:2;30402:3;30398:12;30391:19;;30050:366;;;:::o;30422:419::-;30588:4;30626:2;30615:9;30611:18;30603:26;;30675:9;30669:4;30665:20;30661:1;30650:9;30646:17;30639:47;30703:131;30829:4;30703:131;:::i;:::-;30695:139;;30422:419;;;:::o;30847:182::-;30987:34;30983:1;30975:6;30971:14;30964:58;30847:182;:::o;31035:366::-;31177:3;31198:67;31262:2;31257:3;31198:67;:::i;:::-;31191:74;;31274:93;31363:3;31274:93;:::i;:::-;31392:2;31387:3;31383:12;31376:19;;31035:366;;;:::o;31407:419::-;31573:4;31611:2;31600:9;31596:18;31588:26;;31660:9;31654:4;31650:20;31646:1;31635:9;31631:17;31624:47;31688:131;31814:4;31688:131;:::i;:::-;31680:139;;31407:419;;;:::o;31832:178::-;31972:30;31968:1;31960:6;31956:14;31949:54;31832:178;:::o;32016:366::-;32158:3;32179:67;32243:2;32238:3;32179:67;:::i;:::-;32172:74;;32255:93;32344:3;32255:93;:::i;:::-;32373:2;32368:3;32364:12;32357:19;;32016:366;;;:::o;32388:419::-;32554:4;32592:2;32581:9;32577:18;32569:26;;32641:9;32635:4;32631:20;32627:1;32616:9;32612:17;32605:47;32669:131;32795:4;32669:131;:::i;:::-;32661:139;;32388:419;;;:::o;32813:305::-;32853:3;32872:20;32890:1;32872:20;:::i;:::-;32867:25;;32906:20;32924:1;32906:20;:::i;:::-;32901:25;;33060:1;32992:66;32988:74;32985:1;32982:81;32979:107;;;33066:18;;:::i;:::-;32979:107;33110:1;33107;33103:9;33096:16;;32813:305;;;;:::o;33124:233::-;33264:34;33260:1;33252:6;33248:14;33241:58;33333:16;33328:2;33320:6;33316:15;33309:41;33124:233;:::o;33363:366::-;33505:3;33526:67;33590:2;33585:3;33526:67;:::i;:::-;33519:74;;33602:93;33691:3;33602:93;:::i;:::-;33720:2;33715:3;33711:12;33704:19;;33363:366;;;:::o;33735:419::-;33901:4;33939:2;33928:9;33924:18;33916:26;;33988:9;33982:4;33978:20;33974:1;33963:9;33959:17;33952:47;34016:131;34142:4;34016:131;:::i;:::-;34008:139;;33735:419;;;:::o;34160:224::-;34300:34;34296:1;34288:6;34284:14;34277:58;34369:7;34364:2;34356:6;34352:15;34345:32;34160:224;:::o;34390:366::-;34532:3;34553:67;34617:2;34612:3;34553:67;:::i;:::-;34546:74;;34629:93;34718:3;34629:93;:::i;:::-;34747:2;34742:3;34738:12;34731:19;;34390:366;;;:::o;34762:419::-;34928:4;34966:2;34955:9;34951:18;34943:26;;35015:9;35009:4;35005:20;35001:1;34990:9;34986:17;34979:47;35043:131;35169:4;35043:131;:::i;:::-;35035:139;;34762:419;;;:::o;35187:223::-;35327:34;35323:1;35315:6;35311:14;35304:58;35396:6;35391:2;35383:6;35379:15;35372:31;35187:223;:::o;35416:366::-;35558:3;35579:67;35643:2;35638:3;35579:67;:::i;:::-;35572:74;;35655:93;35744:3;35655:93;:::i;:::-;35773:2;35768:3;35764:12;35757:19;;35416:366;;;:::o;35788:419::-;35954:4;35992:2;35981:9;35977:18;35969:26;;36041:9;36035:4;36031:20;36027:1;36016:9;36012:17;36005:47;36069:131;36195:4;36069:131;:::i;:::-;36061:139;;35788:419;;;:::o;36213:191::-;36253:4;36273:20;36291:1;36273:20;:::i;:::-;36268:25;;36307:20;36325:1;36307:20;:::i;:::-;36302:25;;36346:1;36343;36340:8;36337:34;;;36351:18;;:::i;:::-;36337:34;36396:1;36393;36389:9;36381:17;;36213:191;;;;:::o;36410:175::-;36550:27;36546:1;36538:6;36534:14;36527:51;36410:175;:::o;36591:366::-;36733:3;36754:67;36818:2;36813:3;36754:67;:::i;:::-;36747:74;;36830:93;36919:3;36830:93;:::i;:::-;36948:2;36943:3;36939:12;36932:19;;36591:366;;;:::o;36963:419::-;37129:4;37167:2;37156:9;37152:18;37144:26;;37216:9;37210:4;37206:20;37202:1;37191:9;37187:17;37180:47;37244:131;37370:4;37244:131;:::i;:::-;37236:139;;36963:419;;;:::o;37388:237::-;37528:34;37524:1;37516:6;37512:14;37505:58;37597:20;37592:2;37584:6;37580:15;37573:45;37388:237;:::o;37631:366::-;37773:3;37794:67;37858:2;37853:3;37794:67;:::i;:::-;37787:74;;37870:93;37959:3;37870:93;:::i;:::-;37988:2;37983:3;37979:12;37972:19;;37631:366;;;:::o;38003:419::-;38169:4;38207:2;38196:9;38192:18;38184:26;;38256:9;38250:4;38246:20;38242:1;38231:9;38227:17;38220:47;38284:131;38410:4;38284:131;:::i;:::-;38276:139;;38003:419;;;:::o;38428:148::-;38530:11;38567:3;38552:18;;38428:148;;;;:::o;38582:377::-;38688:3;38716:39;38749:5;38716:39;:::i;:::-;38771:89;38853:6;38848:3;38771:89;:::i;:::-;38764:96;;38869:52;38914:6;38909:3;38902:4;38895:5;38891:16;38869:52;:::i;:::-;38946:6;38941:3;38937:16;38930:23;;38692:267;38582:377;;;;:::o;38965:435::-;39145:3;39167:95;39258:3;39249:6;39167:95;:::i;:::-;39160:102;;39279:95;39370:3;39361:6;39279:95;:::i;:::-;39272:102;;39391:3;39384:10;;38965:435;;;;;:::o;39406:170::-;39546:22;39542:1;39534:6;39530:14;39523:46;39406:170;:::o;39582:366::-;39724:3;39745:67;39809:2;39804:3;39745:67;:::i;:::-;39738:74;;39821:93;39910:3;39821:93;:::i;:::-;39939:2;39934:3;39930:12;39923:19;;39582:366;;;:::o;39954:419::-;40120:4;40158:2;40147:9;40143:18;40135:26;;40207:9;40201:4;40197:20;40193:1;40182:9;40178:17;40171:47;40235:131;40361:4;40235:131;:::i;:::-;40227:139;;39954:419;;;:::o;40379:166::-;40519:18;40515:1;40507:6;40503:14;40496:42;40379:166;:::o;40551:366::-;40693:3;40714:67;40778:2;40773:3;40714:67;:::i;:::-;40707:74;;40790:93;40879:3;40790:93;:::i;:::-;40908:2;40903:3;40899:12;40892:19;;40551:366;;;:::o;40923:419::-;41089:4;41127:2;41116:9;41112:18;41104:26;;41176:9;41170:4;41166:20;41162:1;41151:9;41147:17;41140:47;41204:131;41330:4;41204:131;:::i;:::-;41196:139;;40923:419;;;:::o;41348:98::-;41399:6;41433:5;41427:12;41417:22;;41348:98;;;:::o;41452:168::-;41535:11;41569:6;41564:3;41557:19;41609:4;41604:3;41600:14;41585:29;;41452:168;;;;:::o;41626:360::-;41712:3;41740:38;41772:5;41740:38;:::i;:::-;41794:70;41857:6;41852:3;41794:70;:::i;:::-;41787:77;;41873:52;41918:6;41913:3;41906:4;41899:5;41895:16;41873:52;:::i;:::-;41950:29;41972:6;41950:29;:::i;:::-;41945:3;41941:39;41934:46;;41716:270;41626:360;;;;:::o;41992:640::-;42187:4;42225:3;42214:9;42210:19;42202:27;;42239:71;42307:1;42296:9;42292:17;42283:6;42239:71;:::i;:::-;42320:72;42388:2;42377:9;42373:18;42364:6;42320:72;:::i;:::-;42402;42470:2;42459:9;42455:18;42446:6;42402:72;:::i;:::-;42521:9;42515:4;42511:20;42506:2;42495:9;42491:18;42484:48;42549:76;42620:4;42611:6;42549:76;:::i;:::-;42541:84;;41992:640;;;;;;;:::o;42638:141::-;42694:5;42725:6;42719:13;42710:22;;42741:32;42767:5;42741:32;:::i;:::-;42638:141;;;;:::o;42785:349::-;42854:6;42903:2;42891:9;42882:7;42878:23;42874:32;42871:119;;;42909:79;;:::i;:::-;42871:119;43029:1;43054:63;43109:7;43100:6;43089:9;43085:22;43054:63;:::i;:::-;43044:73;;43000:127;42785:349;;;;:::o;43140:180::-;43188:77;43185:1;43178:88;43285:4;43282:1;43275:15;43309:4;43306:1;43299:15;43326:185;43366:1;43383:20;43401:1;43383:20;:::i;:::-;43378:25;;43417:20;43435:1;43417:20;:::i;:::-;43412:25;;43456:1;43446:35;;43461:18;;:::i;:::-;43446:35;43503:1;43500;43496:9;43491:14;;43326:185;;;;:::o;43517:176::-;43549:1;43566:20;43584:1;43566:20;:::i;:::-;43561:25;;43600:20;43618:1;43600:20;:::i;:::-;43595:25;;43639:1;43629:35;;43644:18;;:::i;:::-;43629:35;43685:1;43682;43678:9;43673:14;;43517:176;;;;:::o

Swarm Source

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